RabbitMQ群集节点失败

时间:2017-06-16 00:47:01

标签: rabbitmq

我有一个RabbitMQ集群(没有HA)设置,多个实例中有节点。从文档中,我理解的是,在集群模式下,队列不是镜像的,而是由声明它的节点所拥有。

那么,现在的问题是,当拥有队列的节点出现故障时会发生什么?如果我错了,请纠正我,因为队列没有镜像,客户端应用程序将丢失队列。

我们是否应该编写逻辑来确定节点是否发生故障,必须重新声明队列,在这种情况下,消息会发生什么?

1 个答案:

答案 0 :(得分:1)

  

那么,现在的问题是,当拥有队列的节点发生故障时会发生什么?

来自docs

  

当RabbitMQ退出或崩溃时,它会忘记队列和消息,除非你告诉它不要。需要做两件事来确保消息不会丢失:我们需要将队列和消息都标记为持久。

下一个问题:

  

我们是否应该编写逻辑来确定节点是否发生故障,必须重新声明队列,在这种情况下,消息会发生什么?

是的,重新声明你的队列是一个好主意。

如果您的节点发生故障,与其连接的所有消费者都将断开连接。每次消费者连接时,它应该假设它的队列不存在,因此,它需要在连接时作为第一个请求发出declare queue个请求。

如果消费者发送declare queue请求和队列does exist,则:

  • declare queue不会影响队列 消息以任何方式。如果消息持续存在,它们将继续存在 在队列中。

  • 在正常情况下(如果你不改变队列的话) 属性)不会抛出任何错误