RabbitMQ马上回答(可能确认混淆)

时间:2014-08-07 03:10:27

标签: rabbitmq

我正在尝试设置一个工作流,其中Producer将消息发送给代理,代理将消息发送给消费者,消费者ACK返回到同一队列/通道,并将其作为“由制片人确认。

我的信息基于此:http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/

根据该文件,它应该等待消费者发送ack或nack。但是,在我的测试中,它立即返回ack(一旦到达代理(RabbitMQ))。

该文件称这将在三种情况下发生:

  • 在basic.return之后立即确认不可路由的强制或即时消息;

  • 否则,瞬间消息在入队时确认;和,

  • 当持久性消息持久保存到磁盘或在每个队列上消耗时,都会确认该消息。

我确保将队列设置为持久并在调用basicPublish时将传递模式设置为2(persisent)。所以这是一个坚持不懈的信息。我还确保成功路由到队列。

这是预期的行为吗?或者我做错了什么来立即确认它而不是等待来自消费者的确认?

1 个答案:

答案 0 :(得分:2)

发布商确认与消费者确认消息的时间无关。

当邮件被保留时,代理将发送“发布者确认”。

发布者了解消费者是否收到消息的唯一方法是实现某种RPC:http://www.rabbitmq.com/tutorials/tutorial-six-python.html

我想知道为什么你需要知道消费者是否收到了消息,因为消息通常是异步的,所以通过等待来自消费者的收据,你就可以将你的体系结构转为同步解决方案