【问题标题】:RabbitMQ queues not getting deleted despite reinstalling Erlang and RabbitMQ尽管重新安装了 Erlang 和 RabbitMQ,但 RabbitMQ 队列没有被删除
【发布时间】:2020-07-02 06:27:08
【问题描述】:

RabbitMQ 版本:3.8.2 Erlang 22.2

由于一些问题,我不得不在服务器上重新安装 RabbitMQ 和 Erlang。

尽管重新安装了应用程序,前一个实例中的队列仍然存在,并且正在创建新队列(队列名称由 Guid 给出,因此是唯一的)。

这是正常行为吗? 如何删除没有附加消费者的旧队列?我以这种方式结束了 25,000 个队列:|

谢谢

【问题讨论】:

  • 您能在管理控制台中看到旧队列吗?
  • @FrankNielsen,是的,它们都列在控制台的“队列”选项卡中

标签: c# rabbitmq


【解决方案1】:

取决于您对队列的使用情况,有一个选项auto-delete 用于删除队列。

队列声明 - 来自文档:

位自动删除 如果设置,则在所有消费者使用完队列后删除队列。最后一个消费者可以显式取消,也可以因为其通道已关闭而取消。如果队列中没有消费者,则不会被删除。应用程序可以像往常一样使用 Delete 方法显式删除自动删除队列。

在此处阅读更多信息:https://www.rabbitmq.com/amqp-0-9-1-reference.html#queue.declare.auto-delete

【讨论】:

  • 您好,感谢您的及时回复。我尝试在 C# 中将 AutoDelete 属性声明为 true,但是可以通过管理控制台将此自动删除设置为策略吗?
  • 不,它不是您可以在管理控制台上创建时添加的参数的一部分 - 所以只能在运行时添加。但是尝试解释你的设置,以及你为什么这样做。也许可以通过其他方式完成。
  • 我正在通过 Masstransit 使用 RabbitMQ。我不认为我可以直接访问 RabbitMQ 的 declare() 方法。但是,我可以将 IRabbitMqBusFactoryConfigurators 的 AutoDelete 属性设置为 true。这行得通吗?
  • 您应该想到的问题是:如果公共交通关闭并且所有队列都有auto-delete,您的解决方案能否继续运行?为什么要为队列使用随机名称?
【解决方案2】:

所以,我想通了。 显然,可以从 RabbitMQ Dashboard 设置一个策略来删除非活动队列。

政策是expires,可以为队列和交换设置(虽然政策似乎只删除队列)。

该策略在规定的不活动时间后删除所有队列(没有消费者订阅队列)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2012-07-12
    • 1970-01-01
    • 2017-03-02
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多