2013-07-18 12 views
6

Nella mia applicazione ho una coda che potrebbe potenzialmente diventare molto grande. Cosa succede se scopro che non c'è più spazio sulla mia macchina? Come posso dividere la coda su più macchine? Forse la filosofia di RabbitMQ è diversa e dovrei creare più code invece di una grande coda ..?Progettazione e ridimensionamento della coda RabbitMQ

migliore, Flavio

risposta

1

RabbimMQ fornisce clustering e high availability features destra, fuori dalla scatola, basta configurarli per le vostre esigenze.

In realtà, AMQP può contenere messaggi di qualsiasi dimensione, ma nella maggior parte dei casi i messaggi sono solo fino a 32 Kb nel 99%, suppongo. È possibile calcolare l'utilizzo delle risorse di stima (min/max/avg) e prendere ulteriori decisioni sul cluster o meno sul cluster.

+2

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

+0

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

+0

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

1

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 ..

Problemi correlati