【问题标题】:RabbitMQ acks immediately(possible confirm confusion)RabbitMQ 立即确认(可能确认混淆)
【发布时间】:2014-09-30 03:54:33
【问题描述】:

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

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

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

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

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

  • 否则,临时消息在入队时即被确认;而且,

  • 持久消息在持久化到磁盘或在每个队列上被使用时得到确认。

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

这是预期的行为吗?还是做错了什么让它立即 ACK 而不是等待消费者的 ack?

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

    Publisher Confirms 与消费者何时确认消息无关。

    消息被持久化后,代理将发送“发布者确认”。

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

    我想知道为什么你需要知道消费者是否收到了消息,因为消息传递通常是异步的,所以通过等待消费者的收据,你正在将你的架构转变为同步解决方案

    【讨论】:

    • 我需要知道消息何时完成处理。我只是使用了一个单独的回复队列。不过,这不是阻塞 rpc 样式,所以我可以接受。
    猜你喜欢
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多