【问题标题】:RabbitMQ - Find out on publisher side that a message has been acknowledged by the consumer(s)RabbitMQ - 在发布者端找出消息已被消费者确认
【发布时间】:2017-06-28 13:28:43
【问题描述】:

我使用 RabbitMQ 作为 MQ 代理。是否可以获得所有队列已确认某条消息的通知?也就是说,如果它被发送到 5 个队列,我们​​会在最后一个/第 5 个消费者确认后收到通知。

我知道您可以介绍reply-to 队列,但这不是我想要的。我不想强迫消费者在确认后向某个队列发送确认消息

是否也可以在代理和/或发布者重启后继续这种跟进?

【问题讨论】:

    标签: rabbitmq amqp


    【解决方案1】:

    不,你说的不可能。

    从发布者端,您无法知道消息是否已在消费者端被 ACK,而且在大多数模式下,这并不是您真正想要的。

    但是,您可以使用Publisher Confirms。这些将通知发布者消息已被路由到所有绑定队列。

    在发布者和消费者方面,data safety 有多种机制。您通常会相信代理不会丢失中间的消息,就像您相信数据库会随着时间的推移保存记录一样。

    如果您的工作流程需要通知您的发布者方已完成复杂的分布式任务,而您真的无法摆脱fire and forget,那么您将需要实现它回复自己,通常是通过附加消息的方式。

    【讨论】: