1

我有一些通过autodelete:yes. 这些都是发布者和消费者。但基本上现在让我们假设他们正在发布消息。因为每个客户端都有一个唯一的绑定密钥,所以我可以对使用这些机器的机器上的每条消息进行明确的处理。一切正常。

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

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

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

4

1 回答 1

1

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

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

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

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

于 2013-03-20T23:20:51.770 回答