Estoy tratando de usar RabbitMq de una manera menos convencional (aunque en este punto puedo elegir cualquier otra implementación de cola de mensajes si es necesario). En lugar de dejar los mensajes push de Rabbit a mis consumidores, el consumidor se conecta a una cola y obtiene un lote de N mensajes (durante los cuales consume algunos y rechaza algunos), luego pasa a otra fila, y así sucesivamente. Esto se hace por redundancia. Si algunos consumidores se cuelgan, se garantiza que todos los mensajes serán consumidos por otro consumidor.Bloqueos y mensajes de recuperación de lotes con RabbitMq
El problema es que tengo varios consumidores y no quiero que compitan en la misma fila. ¿Hay alguna manera de garantizar un bloqueo en una cola? Si no, ¿puedo al menos asegurarme de que si 2 consumidores están conectados a la misma cola, no leen el mismo mensaje? Las transacciones pueden ayudarme hasta cierto punto, pero he escuchado que se eliminarán de RabbitMQ.
También se aceptan otras sugerencias arquitectónicas.
Gracias!
EDITAR: Como se señala en el comentario, hay una particularidad en la forma en que necesito procesar los mensajes. Solo tienen sentido tomarlos en grupos y hay una gran probabilidad de que los mensajes relacionados se agrupen en una cola. Si, por ejemplo, saco un lote de 100 mensajes, hay una gran probabilidad de que pueda hacer algo con los mensajes 1-3, 4-5, 6-10, etc. Si no encuentro un grupo para algunos mensajes, Los volveré a enviar a la cola. WorkQueue no funcionaría porque difundiría mensajes del mismo grupo a varios trabajadores que no sabrían qué hacer con ellos.
Obviamente, los consumidores pueden sincronizar entre sí usando algo como [chismes] (http://en.wikipedia.org/wiki/Gossip_protocol) en caso de que esto no es posible, pero tenía curiosidad ... –