0

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

的输出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

我将 senecajs 与 NodeJS 一起使用。

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

4

1 回答 1

0

回答我自己的问题:

问题是 Docker 在启动后缓存了 DNS 并且无法连接到新的 DNS。因此,如果一个集群发生故障,Docker 仍会尝试连接到该集群,而不是尝试新的集群。

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

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

于 2017-01-13T08:49:56.480 回答