2011-05-26 24 views

Respuesta

8

Las colas de Azure no garantizan el orden de los mensajes ni la exclusividad del mensaje. Los mensajes se procesarán "al menos una vez", pero nada garantiza que no se procesarán dos veces, por lo que no garantiza "como máximo una vez".

Debe estar listo para recibir el mismo mensaje dos veces. Puede poner una identificación en el cuerpo del mensaje como parte de sus datos.

11

vtortola prácticamente lo cubrí, pero quería agregar un poco más de detalles sobre por qué es al menos una vez entrega.

Cuando lee un artículo de la cola, no se elimina de la cola; en cambio, se vuelve invisible pero permanece en la cola. Ese período de invisibilidad se establece en 30 segundos (máximo: 2 horas). Durante ese tiempo, el código que quitó el elemento de la cola tiene tanto tiempo para procesar cualquier comando en el mensaje de la cola y eliminar el elemento de la cola.

Suponiendo que se elimine el elemento de cola antes de que se alcance el período de tiempo de espera, todo está bien. Sin embargo: una vez que se alcanza el período de tiempo de espera, el elemento de cola vuelve a estar visible y el código que contiene el elemento de cola ya no puede eliminarlo. En este caso, alguien más puede leer el mismo mensaje de cola y volver a procesar ese mensaje.

Debido al hecho de una cola de mensajes puede tiempo de espera, y puede volver a aparecer:

  • Su procesamiento de la cola debe ser idempotente - las operaciones en un mensaje de colas ello supone que el mismo resultado (como la representación una miniatura para una foto).
  • Debe pensar en los ajustes de tiempo de espera. Puede encontrar que los comandos son válidos pero el procesamiento lleva demasiado tiempo (quizás su código de renderizado en miniatura de 45 segundos funcionó bien hasta que alguien cargó una imagen de 25MP)
  • Debe pensar en mensajes tóxicos, los que nunca se procesarán correctamente. Tal vez provocan una excepción o tienen alguna condición inválida que hace que el procesador de mensajes aborte el procesamiento, lo que lleva a que el mensaje vuelva a aparecer en la cola. Hay una propiedad llamada DequeueCount - considere ver esa propiedad luego de leer un elemento de la cola y, si es igual a, por ejemplo, 3, inserte el mensaje en una tabla o blob y envíe una notificación para pasar algún tiempo depurando ese mensaje sin conexión.

Más detalles en la API de REST de bajo nivel de obtención son here. Esto le dará más información sobre el manejo de mensajes de cola de Windows Azure.