RabbitMQ 集群中镜像上持久消息的行为
Behaviour of persistent messages on a mirrored in a RabbitMQ cluster
我想弄清楚在只有持久消息的镜像队列中,是否仍然有可能在重新同步过程中丢失消息。
如果我有一个跨两个节点镜像的队列(以简化示例)。
交换器和队列是持久的,所有消息都标记为持久性。
主队列在节点 1 上
镜像队列在节点 2
场景是
- 最初队列是同步的
- 节点 2 宕机
- 节点 2 恢复
- 节点 2 同步之前节点 1 丢失
- 节点2成为master
在第 3 步,节点 2 恢复,它是从它保存的消息存储中加载消息,还是从没有消息开始并开始同步(通过两种标准的重新同步方法)
在镜像队列的情况下,每个队列是否都有自己的消息存储。
如果这种情况确实会丢失消息,是否有可以避免这种情况的情况
看来如果出现这种情况,无论你的配置如何,消息都会丢失。为了缓解这个问题,解决方案是确保
确保消息持久化
队列和交换是持久的
确保使用消费者确认并将其设置为仅
确认消息何时提交给 master 和所有
镜像副本。
确保有适当数量的镜像副本,以便
避免陷入没有同步的情况
队列
吞吐量性能会受到影响。
我想弄清楚在只有持久消息的镜像队列中,是否仍然有可能在重新同步过程中丢失消息。
如果我有一个跨两个节点镜像的队列(以简化示例)。 交换器和队列是持久的,所有消息都标记为持久性。
主队列在节点 1 上 镜像队列在节点 2
场景是
- 最初队列是同步的
- 节点 2 宕机
- 节点 2 恢复
- 节点 2 同步之前节点 1 丢失
- 节点2成为master
在第 3 步,节点 2 恢复,它是从它保存的消息存储中加载消息,还是从没有消息开始并开始同步(通过两种标准的重新同步方法)
在镜像队列的情况下,每个队列是否都有自己的消息存储。
如果这种情况确实会丢失消息,是否有可以避免这种情况的情况
看来如果出现这种情况,无论你的配置如何,消息都会丢失。为了缓解这个问题,解决方案是确保
确保消息持久化
队列和交换是持久的
确保使用消费者确认并将其设置为仅 确认消息何时提交给 master 和所有 镜像副本。
确保有适当数量的镜像副本,以便 避免陷入没有同步的情况 队列
吞吐量性能会受到影响。