RabbitMQ消费者断开事件

时间:2014-06-17 10:52:57

标签: events rabbitmq message

我们有什么方法可以知道消费者何时与队列断开连接或队列被删除?

要求如下:

我正在构建一个系统,其中多个客户端可以从系统订阅某些事件。所有客户端都创建自己的队列,并使用某种身份验证向系统注册自己。在生成事件时,系统会过滤事件并将其转发给符合条件的客户。

我已经为其大部分内容实施了POC,效果很好。我无法解决的一个问题是,如果客户端只是从队列断开连接(由于程序终止等),注册仍然存在,系统一直试图将消息推送到该客户端。

因此,我们希望在客户端断开连接或队列被删除时收到通知,以便我们可以删除该客户端的注册数据,而不再向他发送消息。

1 个答案:

答案 0 :(得分:1)

让您的发布商使用Confirms (aka Publisher Acknowledgements)并使客户端队列成为独占和瞬态的,因此一次只有一个客户端将从一个队列消耗,并且在断开连接后它将被删除。

如果您发布的消息只被路由到一个队列并且该队列消失了(假设您使用发布者确认并发布带有mandatory标志的消息),则会通知发布者无法使用返回的消息路由该消息它,所以你可以停止发布消息。

有关详情,请参阅RabbitMQ blog post "Introducing Publisher Confirms"Confirms (aka Publisher Acknowledgements)官方文档中的确认工作方式部分。