应用程序异常关闭时删除RabbitMQ队列

时间:2015-01-17 07:41:09

标签: c# .net rabbitmq amqp rabbitmq-exchange

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

但我的问题是

  

我在关闭应用程序时无法删除队列   没有点击关闭按钮(让我们说关闭申请   从任务管理器或使用taskkill命令或任何命令提示符   异常原因)因为这个dispose()不会被触发。此时,在我手动从管理门户删除队列之前,不会删除队列。

所以我的问题是,

  

我怎么知道应用程序已关闭以及该孤立队列   可以删除吗?

1 个答案:

答案 0 :(得分:3)

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

你可以做的是让你的应用程序在启动时查询管理API,看看是否因为之前的意外关闭而遗弃了任何队列,或者你可能有一个完全不同的服务负责这样做(这是一个设计选择)。

您可以通过EasyNetQ Management API

查询管理API
managementClient.DeleteQueue(queue);

您可以找到完整的文档here

修改

在做了一些阅读之后,或许是排他或自动删除队列就足够了吗?

  

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

     

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