在动态铲厷中确认节点之间的消息



我知道Rabbit MQ支持发布者确认机制 - 经纪人对发布者的确认。该文档指出,代理通过在设置为"确认模式"的通道上发送 basic.ack 来确认消息,因为它处理消息。此通信在代理和发布方客户端之间进行。

假设我在另一个数据中心有一个主节点 A 和一个辅助节点 B,并且动态铲斗是从 A 设置为 B 的。根据文档,"ack模式"确定铲子如何确认消息。如果设置为"on-confirm",则消息在目标(代理 B(确认后向源代理 (A( 确认。

我想问一下这两种机制是否有联系(或者是否可以(。当连接到节点 A 的客户端收到确认时,这是否意味着消息也已发布到节点 B(如果 ack-mode=on-confirm(?

不,这些没有连接,在动态铲的情况下,进入图片的是ack模式,这是铲子的配置参数之一。它可以采用三个可能的值,它们是

  • 确认时
  • 发布时
  • 无确认

这就是它的工作原理。

确认模式确定铲子应如何确认消息。如果设置为on-confirm(缺省值(,则在目标确认消息后,将向源代理确认消息。这可以处理网络错误和代理故障而不会丢失消息,并且是最慢的选项。

如果设置为on-publish,则消息在目标位置发布后会确认给源代理。这可以处理网络错误而不会丢失消息,但在代理发生故障时可能会丢失消息。

如果设置为no-ack,则不使用消息确认。这是最快的选项,但在网络或代理发生故障时可能会丢失消息。

最新更新