【发布时间】:2017-06-28 13:28:43
【问题描述】:
我使用 RabbitMQ 作为 MQ 代理。是否可以获得所有队列已确认某条消息的通知?也就是说,如果它被发送到 5 个队列,我们会在最后一个/第 5 个消费者确认后收到通知。
我知道您可以介绍reply-to 队列,但这不是我想要的。我不想强迫消费者在确认后向某个队列发送确认消息。
是否也可以在代理和/或发布者重启后继续这种跟进?
【问题讨论】:
我使用 RabbitMQ 作为 MQ 代理。是否可以获得所有队列已确认某条消息的通知?也就是说,如果它被发送到 5 个队列,我们会在最后一个/第 5 个消费者确认后收到通知。
我知道您可以介绍reply-to 队列,但这不是我想要的。我不想强迫消费者在确认后向某个队列发送确认消息。
是否也可以在代理和/或发布者重启后继续这种跟进?
【问题讨论】:
不,你说的不可能。
从发布者端,您无法知道消息是否已在消费者端被 ACK,而且在大多数模式下,这并不是您真正想要的。
但是,您可以使用Publisher Confirms。这些将通知发布者消息已被路由到所有绑定队列。
在发布者和消费者方面,data safety 有多种机制。您通常会相信代理不会丢失中间的消息,就像您相信数据库会随着时间的推移保存记录一样。
如果您的工作流程需要通知您的发布者方已完成复杂的分布式任务,而您真的无法摆脱fire and forget,那么您将需要实现它回复自己,通常是通过附加消息的方式。
【讨论】: