当前位置: 首页 > 知识库问答 >
问题:

RabbitMq ACK/重新发布

贺善
2023-03-14

此处的文档:http://www.rabbitmq.com/semantics.html

声明当信道关闭时,它被重新分配以进行传递

消息可以使用以requeue参数(Basic.recover、Basic.reject和Basic.NACK)为特征的AMQP方法返回到队列,也可以由于在保留未确认消息时通道关闭而返回到队列。对于2.7.0之前的RabbitMQ版本,这些场景中的任何一个都会导致消息在队列的后面被重新分配。从RabbitMQ版本2.7.0开始,消息总是按发布顺序保存在队列中,即使在存在重新队列或通道关闭的情况下也是如此。

状态:仅当工作连接终止时

如果一个消费者在没有发送ack的情况下死亡,那么RabbitMQ将理解一个消息没有被完全处理,并将它重新传递给另一个消费者。这样,即使工作人员偶尔死亡,也可以确保不会丢失任何消息。

没有任何消息超时;RabbitMQ只有在工作连接死亡时才会重新传递消息。即使处理一条消息需要非常非常长的时间,也没有问题。

共有1个答案

赫连泰宁
2023-03-14

第二个引号的措辞不正确,尽管员工页面的上下文仍然正确。你用粗体写的句子将正确地改为:

RabbitMQ会在消费者死亡时重新传递消息。

这样说并不会排除其他合法的情况,但会说明他们在本文中所提出的观点。

如果希望消息重新排队并重新传递,则必须确保noack设置为false(这是默认值)。一旦你有了这一点,你引用的第一段就是正确的。

...

关于您的ChannelManager-不需要。频道是便宜、快捷的东西,可以根据需要站起来拆掉。只要你使用所有的开放通道,只有1个开放通道或者有1000个开放通道都是可以的。

 类似资料:
  • 我们有一个常春藤知识库,我们正在使用gradle进行依赖关系管理和构建框架。当一个工件被确定为生产就绪时,我们不想再次构建它,所以我们只想通过一个web应用程序“升级”一个现有的工件,该应用程序利用Gradle和工具API为我们完成大部分工作。 目前,我正在将工件复制到本地文件夹并运行另一个重新发布它的build.gradle。我们正在将其发布到现有存储库中的新文件夹和发布存储库中的文件夹。 这样

  • System.ObjectDisposedException:无法访问已释放的对象。对象名称:“System.net.Sockets.NetworkStream”。在system.net.sockets.networkstream.read(Byte[]缓冲区,Int32偏移量,Int32大小) 我的问题是我做错了什么?以及重新连接到服务器的最佳解决方案是什么?我的代码如下所示:

  • 尽管试图避免所有记录在案的陷阱,阻止React在状态更改后重新渲染,但我仍然无法解决我的问题: } 从每个长方体组件调用update函数,并触发长方体网格上新颜色的指定。 试图避免常见的错误: 颜色数组只有在通过扩展运算符从状态复制后才被修改 通过setState()传递新数组 此外,我还处理了两个组件中函数的实例绑定 但是,尽管onClick成功触发了状态更改,但不会进行重新渲染。我在这里缺少的

  • 在官方的akka 2.0.4文档中,它说: actor重新启动只替换实际的actor对象;邮箱的内容不受重新启动的影响,因此在postRestart钩子返回后,将继续处理邮件。不会再收到触发异常的消息。在重新启动时发送给参与者的任何消息都将像往常一样排队到其邮箱。 我唯一能想到的是,如果消息由于某种原因出现畸形,它将永远不会离开系统,并导致演员定期重新启动...

  • 我正在与eclipse泛美卫生组织和蚊子工作。我正在发送QOS-1级别的消息。我已经改变了mosquitto的配置,就像在这个问题中回答的那样。我正在使用mqtt镜头来测试。在用户断开连接后,Mosquitto不发送消息。

  • 问题内容: 我一直在尝试了解新的React Context API并正在使用它。我只是想检查一个简单的案例-更新提供者的数据时,所有这些都会重新呈现。 在Codesandbox上 查看 这个小例子 因此,在我的示例中,我有一个组件-其状态如下所示- 我创建了一个新的从这里包含语境做出反应,并从国家和值传递给两位消费者和。 所以我的假设是,如果随机数更新,它将更改上下文,并且两个组件都应触发重新渲染