RabbitMQ 集群中镜像的持久消息的行为

骑在太阳上

我想弄清楚在只有持久消息的镜像队列中,是否仍然有可能在重新同步过程中丢失消息。

如果我有一个跨两个节点镜像的队列(以简化示例)。交换和队列是持久的,所有消息都标记为持久的。

主队列位于节点 1 镜像队列位于节点 2

场景是

  1. 最初队列是同步的
  2. 节点 2 宕机
  3. 节点 2 恢复
  4. 在节点 2 同步之前,节点 1 丢失
  5. 节点 2 成为主节点

在步骤 3 节点 2 恢复时,它是从它已经持久化的消息存储中加载消息,还是从没有消息的情况下开始并开始同步(通过两种标准的重新同步方法)

在队列被镜像的情况下,每个队列是否都有自己的消息存储。

如果这种情况确实会丢失消息,是否有可以避免这种情况的情况

骑在太阳上

似乎如果发生这种情况,无论您的配置如何,消息都会丢失。为了缓解这个问题,解决方案是确保

  • 确保消息持久化

  • 队列和交换是持久的

  • 确保使用消费者确认并将其设置为仅在消息已提交给主服务器和所有镜像副本时确认。

  • 确保有适当数量的镜像副本,以免出现没有同步队列的情况

吞吐量性能会受到影响。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章