我正在尝试设置一个工作流,其中Producer将消息发送给代理,代理将消息发送给消费者,消费者ACK返回到同一队列/通道,并将其作为“由制片人确认。
我的信息基于此:http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/
根据该文件,它应该等待消费者发送ack或nack。但是,在我的测试中,它立即返回ack(一旦到达代理(RabbitMQ))。
该文件称这将在三种情况下发生:
在basic.return之后立即确认不可路由的强制或即时消息;
否则,瞬间消息在入队时确认;和,
当持久性消息持久保存到磁盘或在每个队列上消耗时,都会确认该消息。
我确保将队列设置为持久并在调用basicPublish时将传递模式设置为2(persisent)。所以这是一个坚持不懈的信息。我还确保成功路由到队列。
这是预期的行为吗?或者我做错了什么来立即确认它而不是等待来自消费者的确认?
答案 0 :(得分:2)
发布商确认与消费者确认消息的时间无关。
当邮件被保留时,代理将发送“发布者确认”。
发布者了解消费者是否收到消息的唯一方法是实现某种RPC:http://www.rabbitmq.com/tutorials/tutorial-six-python.html
我想知道为什么你需要知道消费者是否收到了消息,因为消息通常是异步的,所以通过等待来自消费者的收据,你就可以将你的体系结构转为同步解决方案