2017-01-09 7 views
0

Ich habe einen RabbitMQ-Cluster über Docker und Docker Cloud erstellt. Ich habe zwei RabbitMQ-Container auf zwei separaten Knoten (beide auf AWS gehostet).RabbitMQ-Cluster schlägt fehl, wenn ein Knoten nicht erreichbar ist

Die Ausgabe von rabbitmqctl cluster_status ist:

Cluster status of node '[email protected]' ... 
[{nodes,[{disc,['[email protected]','[email protected]']}]}, 
{running_nodes,['[email protected]','[email protected]']}, 
{cluster_name,<<"[email protected]">>}, 
{partitions,[]}] 

Allerdings, wenn ich einen Container/node bin stoppen, dann kann meine Nachrichten nicht delievered erhalten und in .dlx

Warteschlange werde ich senecajs mit NodeJS bin mit .

Hat jemand die gleichen Probleme und kann mich in eine Richtung zeigen?

+0

Verwenden Sie HA-Warteschlangen? https://www.rabbitmq.com/ha.html – Gabriele

Antwort

0

Um meine eigene Frage zu beantworten:

Das Problem ist, dass Docker, nach dem Start der DNS-Caches und ist nicht die Lage einen neuen zu verbinden. Wenn also ein Cluster ausfällt, versucht Docker immer , sich mit dem einen zu verbinden, anstatt einen neuen zu versuchen.

Die Lösung bestand darin, meine eigene Funktion zu schreiben, wenn ich eine Verbindung zum RabbitMQ herstelle. Ich überprüfe zuerst mit net.createConnection, wenn der Host online ist. Wenn ja, verbinde ich mich, wenn nicht, versuche ich einen anderen.

Jedes Mal, wenn ein RabbitMQ-Knoten ausfällt, schlägt mein Dienst fehl, startet neu und ruft die Funktion "try this host" auf.

Verwandte Themen