rabbitmq - 动态铲除节点间消息的确认
问题描述
我知道 Rabbit MQ 支持发布者确认机制——代理对发布者的确认。文档指出,代理在处理消息时通过在设置为“确认模式”的通道上发送 basic.ack 来确认消息。这种通信是在代理和发布者客户端之间进行的。
假设我在另一个数据中心有一个主节点 A 和一个辅助节点 B,并且从 A 到 B 设置了动态 shoveling。根据文档,“ack-mode”决定了 shovel 如何确认消息。如果设置为 on“on-confirm”,则消息在目标(代理 B)确认后向源代理(A)确认。
我想问一下这两种机制是否相互关联(或者它们是否可以相互关联)。当连接到节点 A 的客户端收到确认时,这是否意味着消息也已发布到节点 B(如果 ack-mode=on-confirm)?
解决方案
不,这些是没有连接的,如果是动态铲子,就会出现ack-mode,它是铲子的配置参数之一。它可以取三个可能的值,它们是
- 确认
- 出版时
- 无应答
这就是它的工作原理。
ack-mode确定铲子应如何确认消息。如果设置为on-confirm
(默认值),则消息在目标确认后向源代理确认。这可以在不丢失消息的情况下处理网络错误和代理故障,并且是最慢的选项。
如果设置为on-publish
,则消息在目标发布后会向源代理确认。这可以在不丢失消息的情况下处理网络错误,但在代理失败的情况下可能会丢失消息。
如果设置为no-ack
,则不使用消息确认。这是最快的选择,但在网络或代理失败的情况下可能会丢失消息。
推荐阅读
- c# - 0 解决方案 GridViewDataComboBoxColumn - 如何在编辑表单上显示比网格显示更多的列
- c++ - 带有 cv 和 ref 类型的模板特化
- python - 如何根据需要打印字典输出
- php - 我收到未捕获的错误:在 PHP 中提交表单时调用成员函数 isSMTP() on null 错误
- ruby-on-rails - 在 Rails 应用程序中合并 jQuery UI 对话框时遇到问题
- php - 浏览器无法连接到邮件服务器
- javascript - 触发 onClick 事件后,提交的属性不会更新
- javascript - 如何使引导模式背景获得模糊效果
- rest - 请求中指定的流明返回关系
- python - 如何在 python tkinter 中设置不透明度标签