Me gustaría asegurarme de no insertar un mensaje en la cola varias veces. ¿Hay alguna ID/Nombre que pueda usar para forzar la exclusividad?Mensaje único de Azure Queue
Respuesta
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.
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.
- 1. Azure Blob and Queue Thread Safety
- 2. Query Free Queue - Productor único, múltiples consumidores
- 3. MSMQ Enviar mensaje a Remote Queue
- 4. Enviando mensaje a un socket único
- 5. Queue ordinario frente a SEDA Queue
- 6. Message Queue vs Task Queue difference
- 7. jQuery queue events
- 8. Hazelcast Queue Info
- 9. Administración de TPL Queue
- 10. ¿Buena estrategia para Message Queue Server?
- 11. ¿Cuál es la diferencia entre Dead Letter Queue y back out Queue?
- 12. Simular o simular Message Queue (JMS)
- 13. Cómo enviar un mensaje a un receptor en particular mediante JMS Queue
- 14. Android hilo queue
- 15. Boost Message Queue
- 16. JavaScript Function Queue
- 17. .Net SMTP Queue
- 18. MassTransit Queue Maintenance
- 19. Message Queue o Scheduler
- 20. Pipe vs msg queue
- 21. Observable Stack and Queue
- 22. Concurrent Set Queue
- 23. WSMQ Queue Limit
- 24. implementaciones de Java Queue, ¿cuál?
- 25. ¿Mejor implementación de Java Queue?
- 26. JBoss JMS Remote Queue?
- 27. Roles e instancias de Azure
- 28. expiración de Azure Table Storage
- 29. ¿Puede queue :: pop devolver un valor ahora?
- 30. hace múltiples trabajador Azure función de votación misma cola provoca Dead Lock o mensaje veneno