2010-08-05 14 views
10

RabbitMQ supporta il clustering per impostazione predefinita, ma le code non vengono replicate e sono associate al nodo su cui sono state create. Ora sto cercando dei modi per rendere RabbitMQ altamente disponibile oltre alla soluzione DRBD che hanno documentato, perché sembra uno spreco di risorse riservare un intero server che non sta facendo altro che aspettare che il server attivo scenda.Come eseguire il failover delle code RabbitMQ?

Sto pensando a un setup in cui ci sono due code. Quando viene pubblicato un messaggio, voglio che il cluster RabbitMQ invii il messaggio a una delle due code, a seconda di quale delle due è attiva. So che l'editore riceverà un errore se tenta di pubblicare su una coda non disponibile e che l'editore può riprovare con l'altra coda, ma mi chiedo se questo può essere fatto automaticamente a livello di cluster in modo che non lo faccia Devo scrivere codice client per gestirlo. Può essere fatto?

risposta

5

Dai un'occhiata allo Alternate Exchanges.

È fondamentalmente quello che hai chiesto, ma con scambi invece di code. L'idea sarebbe quella di pubblicare su uno scambio con uno scambio alternativo specificato (puoi farlo con uno qualsiasi dei client RabbitMQ). Se il messaggio può essere consegnato al primo, lo farà. In caso contrario (poiché non può essere raggiunto o perché non ci sono code ad esso collegate), viene utilizzato l'alternativa.

11

Recentemente RabbitMQ ha aggiunto il supporto nativo attivo/attivo. http://www.rabbitmq.com/ha.html

+0

Come sarebbe meglio di uno scambio alternativo? – guiomie

+0

@guiomie, in Exchange alternativo, se il nodo master si interrompe, tutti i messaggi sono spariti. La configurazione attiva/attiva copierà ogni messaggio sul server di riserva quando viene inviato al master. –

4

Le code "mirroring" ad alta disponibilità sono il gold standard per Rabbit HA.