首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果消息被发布(启用确认)到具有自由消费者的队列,RabbitMQ是否提供传递保证?

如果消息被发布(启用确认)到具有自由消费者的队列,RabbitMQ是否提供传递保证?
EN

Stack Overflow用户
提问于 2016-09-17 17:40:54
回答 1查看 2.1K关注 0票数 1

上下文:

假设我使用RabbitMQ执行以下操作:

  1. 将使用者连接到RabbitMQ中的队列RabbitMQ。
    • 这个消费者可以是在noack模式下,也可以不是;没有区别。
    • 如果不处于noack模式,则假设该使用者设置了basic.qoschannel.flow,使其能够接收消息;它的缓冲区没有满,并且能够使用。

  1. 将发布服务器连接到同一个RabbitMQ集群,并将强制消息(启用公布确认 )发布到Q
  2. 在发布服务器中接收basic.ack

问题:

  • 当返回该basic.ack时,RabbitMQ是否保证将该消息发送到使用者的远程套接字?我知道它不能保证消息已经到达了消费者的本地套接字缓冲区,但是我感兴趣的是代理是否发送了它。
  • mandatory出版物的存在/缺位是否以任何方式影响这些保证?
  • 消息发布前队列是否完全为空,是否以任何方式影响这些保证?
  • RabbitMQ路由消息的版本是否以任何方式影响这些保证(即,这些保证仅存在于某些RMQ版本中)?
  • 信息的持久性是否以任何方式影响这些保证?
  • 目标RMQ是否是聚类以任何方式影响这些保证?
  • 每条消息的过期时间是否会以任何方式影响这些保证?

TL;DR:在哪些情况下,RMQ保证, 向发布者发送了已发布的消息,已从代理发送给消费者?

我尝试过的:

我试着用连接消费者和将消息发布到不同配置的队列来测试这一点。这些消息通常是在接收到basic.ack时收到的。但是,我无法由此推断出任何保证,因为在许多地方引入了延迟和混淆:

  • basic.ack传输回发行者的时间。
  • 消息体到使用者的传输时间。
  • 同步发布者和使用者之间的跟踪时钟(如果它们位于单独的主机上/在不同的进程中),这很难证明。

因此,我希望了解代理本身由于其内部代码流而提供的担保,因为它在外部验证这些东西(没有模糊程序或类似杰普森的东西)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-17 18:46:18

是否存在RMQ向发布者保证已从代理发送到使用者的已发布消息的任何情况?

不是的。

发布服务器的ack是消息已被RabbitMQ交换接收并将被路由的语句。

例如,您可以使用未连接到队列的路由密钥将消息路由到遗忘状态。在这种情况下,发布者仍然接收ack,因为消息已经发布。只是哪儿都没去。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39549878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档