【问题标题】:RabbitMQ cluster fails when one node is not reachable当一个节点不可达时,RabbitMQ 集群失败
【发布时间】:2017-01-09 09:34:17
【问题描述】:

我通过 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 中排队

我正在使用带有 NodeJS 的 senecajs。

有没有人有同样的问题可以指点我一个方向?

【问题讨论】:

标签: node.js docker rabbitmq seneca


【解决方案1】:

回答我自己的问题:

问题是 Docker 在启动后缓存了 DNS 而不是 能够连接到一个新的。所以如果一个集群出现故障,Docker 仍然 尝试连接到那个,而不是尝试新的。

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

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

【讨论】:

    猜你喜欢
    • 2015-01-23
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 2023-01-30
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多