我通过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。
有没有人遇到同样的问题,可以指出我的方向?
答案 0 :(得分:0)
回答我自己的问题:
问题在于Docker在启动后缓存DNS而不是 能够连接到新的。因此,如果一个集群失败,Docker仍然存在 尝试连接到一个,而不是尝试新的。
解决方案是在连接RabbitMQ时编写自己的函数。如果主持人在线,我首先检查net.createConnection。如果是,我连接到它,如果不是,我尝试不同的。
每次RabbitMQ节点关闭时,我的服务都会失败,重新启动并调用“尝试此主机”功能。