在rabbitmq上删除队列时通知消费者

时间:2013-03-20 15:02:13

标签: rabbitmq

我有一些客户通过autodelete:yes连接到交易所。这些都是出版商和消费者。但基本上现在让我们假设他们正在发布消息。因为每个客户端都有一个唯一的绑定密钥,所以我可以在使用这些机器的机器上的每条消息上做明确的事情。一切正常。

现在,如果客户端崩溃或我手动终止(通过SIGINT,ctrl + c),则队列将被删除。有什么办法可以告诉远程机器上的消费者删除队列吗?

我正在考虑在我的客户端应用程序上创建一个信号处理程序,因此每当我捕获SIGINT或SIGTERM时,我都会通知远程消费者(我会向他们发送一条消息,指出具有唯一ID的队列)将被删除)

有没有其他方法可以做到这一点,或者我的方式是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

作为消息传递的一般规则,使用应用程序并不关心生成应用程序的状态。

在RabbitMQ中,生成应用程序可能会通过两种机制之一了解消费应用程序的状态。第一种(也是首选)方法是通过Dead-Letter Exchange (dlx)。当您的消息无法传递时(因为目标队列不存在),它将在此处路由,您的应用程序可以从DLX上配置的队列中提取消息,以确定它们是否未到达目的地

第二种方法是在消息上设置Mandatory标志。这将导致代理在目标队列不再存在的情况下,通过Basic.Return方法将消息直接发送回生产应用程序。

如果上述项目无法满足您的需求,您可能需要稍微重新审视您的架构,因为可能有更好的方法来设计您的应用程序。