Come si può leggere sulla mailing list RabbitMQ thread http://rabbitmq.1065348.n5.nabble.com/RabbitMQ-scalability-design-question-td28323.html, la soluzione che ho trovato è quella di implementare il modello di consumatori in competizione (molti consumatori in coda) che quando rileva un messaggio speciale (con flag di stop attivato) invia uno STOP messaggio a uno scambio di argomenti.
Questo messaggio di arresto viene ricevuto da un utente "principale" per quella coda che avvia il polling di un Zookeeper (tramite il curatore) finché tutti i figli di un ceratain zkNode sono stati eliminati (utilizzando Zookpeer come registro dei client di coda in questo caso). Quando tutti i consumatori hanno terminato la loro fase di arresto, il cliente "principale" svolge alcuni compiti e riabilita i consumatori della coda originale inviando un messaggio RESTART allo scambio di argomenti (dove ogni consumatore sta ascoltando con una coda dedicata).
Spero che questo potrebbe aiutare (o "ispirare") qualcun altro ..
Da quello che ho capito le code non possono essere suddivisi tra macchine diverse, una singola coda risiedeva solo su un singolo nodo (in modo da una singola coda non può scalare tanto) .. mi sbaglio? – user2539645
Proprio così, coda in diretta su un singolo nodo (ma può essere speculare a un altro). Qual è la dimensione stimata e la portata del tuo messaggio? – pinepain
In realtà è qualcosa che verrà valutato nei prossimi giorni .. Mi aspetto che i terabyte di dati arrivino in ore, quindi dovrei aspettarmi un sistema molto pesante. Forse una soluzione migliore potrebbe essere creare un nuovo scambio invece di fare la fila e aggiungere più code (impegnative al cluster) man mano che il carico aumenta ... cosa ne pensi? Il problema è: lo scambio crea una nuova coda in modo uniforme sui nodi (come il round robin)? – user2539645