【问题标题】:Delete RabbitMQ Queue when Application is closed abnormallyApplication异常关闭时删除RabbitMQ Queue
【发布时间】:2015-03-15 20:22:14
【问题描述】:

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

但我的问题是

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

所以我的问题是,

我如何知道应用程序已关闭以及该孤儿队列 可以删除吗?

【问题讨论】:

  • 您可以选择拥有专属队列吗?
  • 谢谢。 @zaq178miami

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


【解决方案1】:

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

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

您可以通过EasyNetQ Management API查询您的管理API:

managementClient.DeleteQueue(queue);

您可以找到完整的文档here

编辑:

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

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

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

【讨论】:

  • 感谢您的回复。我正在动态创建所有队列。所以我不知道哪些队列是孤立的,哪些不是。当 RabbitMQ 的对象超出其范围时,我需要执行此操作。再次感谢您的帮助和努力。
  • 为什么不跟踪您创建的队列以便以后检查它们?
  • 增加了客户端的开销。所以我不能跟踪。
  • 是的,它奏效了。谢谢。它删除队列但连接保持打开状态。现在无法关闭连接。我不允许在 formClosing 调用 dispose(),因为这不是一个好习惯。
猜你喜欢
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多