当一个节点无法访问时,RabbitMQ群集将失败

时间:2017-01-09 09:34:17

标签: node.js docker rabbitmq seneca

我通过Docker和Docker Cloud创建了一个RabbitMQ集群。我在两个单独的节点上运行两个RabbitMQ容器(都在AWS上托管)。

rabbitmqctl cluster_status的输出是:

Cluster status of node 'rabbit@rabbitmq-cluster-2' ...
[{nodes,[{disc,['rabbit@rabbitmq-cluster-1','rabbit@rabbitmq-cluster-2']}]},
 {running_nodes,['rabbit@rabbitmq-cluster-1','rabbit@rabbitmq-cluster-2']},
 {cluster_name,<<"rabbit@rabbitmq-cluster-1">>},
 {partitions,[]}]

但是,当我停止一个容器/节点时,我的邮件无法在.dlx

排队并排队

我正在使用NodeJS的senecajs。

有没有人遇到同样的问题,可以指出我的方向?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

  

问题在于Docker在启动后缓存DNS而不是   能够连接到新的。因此,如果一个集群失败,Docker仍然存在   尝试连接到一个,而不是尝试新的。

解决方案是在连接RabbitMQ时编写自己的函数。如果主持人在线,我首先检查net.createConnection。如果是,我连接到它,如果不是,我尝试不同的。

每次RabbitMQ节点关闭时,我的服务都会失败,重新启动并调用“尝试此主机”功能。