RabbitMQ在节点崩溃后删除损坏的队列

问题描述 投票:1回答:1

RabbitMQ版本3.7.21Erlang版本Erlang 21.3.8.10

我的团队昨晚有2个节点达到了内存水印,因此我重建了坏节点,但它使一些队列处于坏状态。我想清除它们,以便我们可以重新创建它们。

统计数据显示就绪,未确认和总计的NaN,队列中的统计数据如下:

queue stats

看来队列的节点已经不存在了,很遗憾我无法访问它。它完全消失了。

我尝试了以下命令:

rabbitmqctl eval 'Q = rabbit_misc:r(<<"/">>, queue, <<"QUEUE">>), rabbit_amqqueue:internal_delete(Q).'

rabbitmqctl eval 'Q = {resource, <<"/">>, queue, <<"QUEUE">>}, rabbit_amqqueue:internal_delete(Q).'

但出现此错误:

{:undef, [{:rabbit_amqqueue, :internal_delete, [{:resource, "/", :queue, "QUEUE"}], []}, {:erl_eval, :do_apply, 6, [file: 'erl_eval.erl', line: 680]}, {:rpc, :"-handle_call_call/6-fun-0-", 5, [file: 'rpc.erl', line: 197]}]}

我以为这意味着它正在尝试对不再存在且失败的节点进行RPC调用。在我看来,这很疯狂,因为不仅节点消失了,而且集群中的节点也将其遗忘了,但仍然剩下几个队列。

rabbitmq
1个回答
0
投票

似乎有3个选项:

  1. 梳理Mnesia表并删除损坏的表
  2. 完全重建集群并迁移到新集群
  3. 重命名队列并忽略损坏的队列

[我们现在将继续使用选项3,但我敢肯定,RabbitMQ最终将发生重大变化,这将使选项2更具吸引力,但目前,快速修复最适合我。

© www.soinside.com 2019 - 2024. All rights reserved.