上下文:
假设我使用RabbitMQ执行以下操作:
noack模式下,也可以不是;没有区别。noack模式,则假设该使用者设置了basic.qos和channel.flow,使其能够接收消息;它的缓冲区没有满,并且能够使用。
Q。basic.ack。问题:
basic.ack时,RabbitMQ是否保证将该消息发送到使用者的远程套接字?我知道它不能保证消息已经到达了消费者的本地套接字缓冲区,但是我感兴趣的是代理是否发送了它。mandatory出版物的存在/缺位是否以任何方式影响这些保证?TL;DR:在哪些情况下,RMQ保证, 向发布者发送了已发布的消息,已从代理发送给消费者?
我尝试过的:
我试着用连接消费者和将消息发布到不同配置的队列来测试这一点。这些消息通常是在接收到basic.ack时收到的。但是,我无法由此推断出任何保证,因为在许多地方引入了延迟和混淆:
basic.ack传输回发行者的时间。因此,我希望了解代理本身由于其内部代码流而提供的担保,因为它在外部验证这些东西(没有模糊程序或类似杰普森的东西)。
发布于 2016-09-17 18:46:18
是否存在RMQ向发布者保证已从代理发送到使用者的已发布消息的任何情况?
不是的。
发布服务器的ack是消息已被RabbitMQ交换接收并将被路由的语句。
例如,您可以使用未连接到队列的路由密钥将消息路由到遗忘状态。在这种情况下,发布者仍然接收ack,因为消息已经发布。只是哪儿都没去。
https://stackoverflow.com/questions/39549878
复制相似问题