2017-06-16 239 views
1

我有一个RabbitMQ集群(没有HA)设置与多个实例中的节点。从文档中,我了解的是,在集群模式下,队列不会被镜像,并且它被声明的节点所拥有。RabbitMQ集群节点故障

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

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

+0

如果节点拥有队列死了,死的队列,消息dead.You可以检查是否存在然后决定是否申报。 –

回答

1

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

docs

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

下一个问题:

我们应该写我们的逻辑弄清楚,如果节点出现故障,队列必须重新申报,在这种情况下,会发生这些消息呢?

是的,它是一个好主意,重新宣布你的队列。

当您的节点关闭时,连接到它的所有用户都将断开连接。每次消费者连接时,应该假定它的队列不存在,因此,当它连接时,它需要作为第一请求发起请求declare queue

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

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

  • 在正常情况下(如果你不改变队列的 属性)没有错误将被抛出