Pregunta

Tengo un sistema que va a generar mensajes de forma esporádica, y me gustaría que sólo presenten ya sea cero o un mensaje cada 5 minutos. Si no se genera ningún mensaje, nada sería procesado por el consumidor cola. Si un centenar de mensajes idénticos se generan dentro de los 5 minutos sólo quiero uno de esos para ser consumido de la cola.

Estoy utilizando AMQP (RabbitMQ), hay una manera de lograr esto dentro RabbitMQ o el protocolo AMQP? ¿Puedo inspeccionar el contenido de una cola para asegurarse de que no se inserta un duplicado? Parece que la inspección de la cola es una mala idea y por lo general no lo debe hacer por un sistema de mensajería.

Sin inspección de cola, se puede lograr esto con estas herramientas? La única solución que viene a la mente es tener una segunda cola que se lleva todos los mensajes, entonces el consumidor lee cada mensaje y lo pone en una cola interna, espera 5 minutos, y los mensajes duplicados que se reciben se descarta. Después del retardo, el mensaje solo se pone en la cola de "real" para ser procesado.

Parece que esto podría ser una situación común, que un sistema de colas podía manejar. ¿Alguna idea?

¿Fue útil?

Solución

Estado de la gestión de mensajes no es algo que AMQP está tratando. Se podría tratar de manejar el estado en algún proceso que también está presente en los mensajes AMQ y de proxy (como usted escribió en su pregunta original). Dependiendo de su situación a su quizás podría usar secuencias o medios más sofisticados de detección de duplicados sin estado, pero AMQP no maneja este caso de uso específico.

Lo único que está garantizado es que si varios enlaces coinciden con un mensaje que se entrega posteriormente a una cola sólo un mensaje se entrega realmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top