上下文
假设我使用RabbitMQ执行以下操作:
Q
。
noack
模式,也可以不是;没有区别。noack
模式;假设此消费者已将basic.qos
和channel.flow
设置为可以接收消息;它的缓冲区未满,可以使用。Q
。basic.ack
。问题:
basic.ack
时,RabbitMQ是否保证将该消息发送到消费者的远程套接字?我知道它不能保证消息在消费者的本地套接字缓冲区中到达,但我对代理是否发送它感兴趣。 mandatory
出版物的存在与否是否会以任何方式影响这些保证?TL; DR:在任何情况下,RMQ都会向发布商保证已发布的消息已从代理发送给消费者
我尝试过的事情:
我尝试通过连接使用者并将消息发布到各种配置的队列来测试它。通常在收到basic.ack
时收到消息。但是,由于在许多地方引入了延迟和混淆,我无法从中推断出任何保证:
basic.ack
返回发布商的传输时间。因此,由于其内部代码流,我正在寻求由代理本身提供的保证知识,因为在外部验证这些内容(没有模糊或jepsen之类的东西)。
答案 0 :(得分:2)
在任何情况下,RMQ都会向发布商保证已发布的消息已从经纪人发送给消费者吗?
没有
发布者的ack
是一个声明,表明RabbitMQ交换已收到该消息,并将被路由。
ack
,因为邮件已发布。它只是没有去任何地方。