2010-04-07 12 views
8

Attualmente sto valutando i sistemi di code messaggi e RabbitMq mi sembra un buon candidato, quindi sto scavando un po 'di più in esso.RabbitMq esegue round-robin dallo scambio alle code

Per dare un piccolo contesto sto cercando di avere qualcosa come un carico di scambio che bilancia il messaggio che pubblica su più code. Non voglio replicare i messaggi, quindi uno scambio di fanout non è un'opzione.

Anche il motivo per cui sto pensando di avere più code e una coda che gestiscono il round-robin con i consumatori, è che non voglio che il nostro singolo punto di errore sia a livello di coda.

Sembra che potrei aggiungere un po 'di logica sul lato dell'editore per simulare tale comportamento modificando la chiave di routing e disponendo delle associazioni appropriate. Ma è una specie di approccio passivo che non tiene conto del ritmo del consumo di messaggi su ciascuna coda, portando potenzialmente a riempire una coda se le applicazioni consumer di quella coda sono morte.

Stavo cercando un modo più proattivo dal lato dell'entità dello scambio, che avrebbe deciso dove inviare il messaggio successivo in base a ciascuna dimensione della coda o qualcosa del genere.

Ho letto di Alice e delle API RESTful disponibili, ma sembra una soluzione pesante per implementare decisioni di routing veloce.

Qualcuno sa se il round-robin tra lo scambio le code è fattibile con RabbitMQ allora? Grazie.

+0

Non appena abbiamo testato una singola coda in produzione, ci siamo imbattuti in un problema di scala.Una singola coda è a thread singolo. Non può tenere il passo con il nostro carico. Stiamo cercando le migliori pratiche per lavorare in una distribuzione round robin –

risposta

4

Gli scambi sono generalmente apolidi nel modello AMQP, anche se ci sono stati alcuni recenti esperimenti in scambi di stato ora che esiste sia un sistema per gestire i plugin RabbitMQ che per fornire nuovi tipi di scambio sperimentale.

Non c'è niente che faccia esattamente quello che vuoi, non credo, anche se non sono completamente sicuro di aver capito il requisito. A parte il punto single-point-of-failure, una singola coda con gli operatori che leggono risolverebbe il tuo problema? In tal caso, il problema si riduce alla configurazione di RabbitMQ in una configurazione HA che consente di utilizzare tale soluzione. Ci sono un paio di approcci per farlo: utilizzare HALinux e un negozio condiviso per ottenere HA attivo/passivo con failover rapido o impostare più di un broker parallelo e deduplicare sul client, magari usando redis o simili per farlo.

Ti suggerisco di porre nuovamente la tua domanda sulla mailing list di rabbitmq-discuss, dove più persone saranno in grado di offrire suggerimenti e dove la discussione può essere archiviata per i posteri.

+0

Grazie per l'aiuto. Per ora è un buon lavoro, visto che sono solo in fase di valutazione. – Lancelot

0

Un costruito nel modo in cui si può fare una forma di condivisione di un cambio modulo per le code, ma non esattamente round robin, is Consistent Hashing. rabbitmq_consistent_hash_exchange

Come troppo https://medium.com/@eranda/rabbitmq-x-consistent-hashing-with-wso2-esb-27479b8d1d21

carta per spiegare, mette code a una distribuzione ponderata su un cerchio e poi con l'invio di chiave di routing casuale invierà alla coda più vicino. http://www8.org/w8-papers/2a-webserver/caching/paper2.html