我们有什么方法可以知道消费者何时与队列断开连接或队列被删除?
要求如下:
我正在构建一个系统,其中多个客户端可以从系统订阅某些事件。所有客户端都创建自己的队列,并使用某种身份验证向系统注册自己。在生成事件时,系统会过滤事件并将其转发给符合条件的客户。
我已经为其大部分内容实施了POC,效果很好。我无法解决的一个问题是,如果客户端只是从队列断开连接(由于程序终止等),注册仍然存在,系统一直试图将消息推送到该客户端。
因此,我们希望在客户端断开连接或队列被删除时收到通知,以便我们可以删除该客户端的注册数据,而不再向他发送消息。
答案 0 :(得分:1)
让您的发布商使用Confirms (aka Publisher Acknowledgements)并使客户端队列成为独占和瞬态的,因此一次只有一个客户端将从一个队列消耗,并且在断开连接后它将被删除。
如果您发布的消息只被路由到一个队列并且该队列消失了(假设您使用发布者确认并发布带有mandatory
标志的消息),则会通知发布者无法使用返回的消息路由该消息它,所以你可以停止发布消息。
有关详情,请参阅RabbitMQ blog post "Introducing Publisher Confirms"和Confirms (aka Publisher Acknowledgements)官方文档中的确认工作方式部分。