1

我正在使用.NET RabbitMQ Client图书馆。我想开发一个消息系统。为此,我已经实现了 RabbitMQ 的所有必要方法。此外,我还开发dispose()了删除队列。我在FormClosing事件中调用此方法,因此当用户通过单击关闭按钮关闭应用程序时将触发此方法,并且逻辑队列将被删除。到目前为止,所有代码都运行良好。

但我的问题是

我无法在关闭应用程序时删除队列而不单击关闭按钮(我们只是说从任务管理器或使用 taskkill 命令的命令提示符或任何异常原因关闭应用程序),因为这个 dispose() 不会触发。此时,队列不会被删除,直到我手动从管理门户中删除它。

所以我的问题是,

我如何知道应用程序已关闭并且可以删除孤立队列?

4

1 回答 1

3

RabbitMQ 公开了一个基于 REST 的管理 API,使您能够处理队列创建/删除。

您可以做的是让您的应用程序在启动时查询该管理 API,以查看是否有任何队列由于先前的意外关闭而被遗弃,或者您可以拥有一个完全不同的服务来负责执行此操作(这是一种设计选择)。

您可以通过以下方式查询您的管理 API EasyNetQ Management API

managementClient.DeleteQueue(queue);

您可以在此处找到完整的文档。

编辑:

做一些阅读之后,也许独占或自动删除队列就足够了?

独占(仅由一个连接使用,当该连接关闭时队列将被删除)

自动删除(当最后一个消费者取消订阅时,队列被删除)

于 2015-01-17T08:34:23.273 回答