2017-01-09 66 views
0

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

rabbitmqctl cluster_status输出是:

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

然而,当我停止一个容器/节点,那么我的消息无法得到被传送出去,我使用senecajs用的NodeJS在.dlx

得到排队。

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

+0

你使用HA队列吗? https://www.rabbitmq.com/ha.html – Gabriele

回答

0

要回答我的问题:

问题是码头工人,在启动后,缓存DNS,而不是 能够连接到一个新的。因此,如果一个群集发生故障,Docker仍然会尝试连接到该群集,而不是尝试新群集。

解决的办法是在连接到RabbitMQ时编写我自己的函数。如果主机在线,我首先检查net.createConnection。如果是,我连接到它,如果没有,我尝试一个不同的。

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

相关问题