Sto tentando di utilizzare RabbitMq in un modo più anticonvenzionale (anche se a questo punto posso selezionare qualsiasi altra implementazione di coda di messaggi, se necessario). Invece di lasciare i messaggi push di Rabbit ai miei consumatori, l'utente si connette a una coda e recupera un batch di messaggi N (durante il quale ne consuma alcuni e ne rifiuta alcuni), dopo di che salta a un'altra coda e così via. Questo è fatto per la ridondanza. Se alcuni consumatori si bloccano, tutti i messaggi sono garantiti per essere consumati da altri utenti.Locks and batch fetch messages con RabbitMq
Il problema è che ho più utenti e non voglio che competano sulla stessa coda. C'è un modo per garantire un blocco su una coda? In caso contrario, posso essere sicuro che se 2 utenti sono connessi alla stessa coda non leggono lo stesso messaggio? Le transazioni potrebbero aiutarmi in qualche modo, ma ho sentito parlare che verranno rimosse da RabbitMQ.
Anche altri suggerimenti architettonici sono ben accetti.
Grazie!
EDIT: Come sottolineato nel commento c'è un una particolarità nel modo in cui ho bisogno per elaborare i messaggi. Hanno senso solo in gruppi e c'è un'alta probabilità che i messaggi correlati siano raggruppati in una coda. Se ad esempio estraggo un lotto di 100 messaggi, è molto probabile che sarò in grado di fare qualcosa con i messaggi 1-3, 4-5,6-10 ecc. Se non riesco a trovare un gruppo per alcuni messaggi li riporterò in coda. WorkQueue non funzionerebbe perché diffonderebbe messaggi dallo stesso gruppo a più lavoratori che non saprebbero cosa fare con loro.
Ovviamente i consumatori possono sincronizzare tra loro usando qualcosa come [Gossip] (http://en.wikipedia.org/wiki/Gossip_protocol) nel caso in cui questo non è possibile, ma ero curioso ... –