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

RabbitMQ在节点崩溃后删除损坏的队列,rabbitmq,Rabbitmq,RabbitMQ版本3.7.21 Erlang版本Erlang 21.3.8.10 我的团队昨晚有两个节点碰到了内存水印,所以我重建了坏节点,但它使一些队列处于坏状态。我想把它们清理掉,这样我们就可以重新创造它们 统计数据显示就绪、未确认和总计的NaN,队列中的统计数据如下所示: 队列的节点似乎已不存在,因此很遗憾,我无法访问它。它完全消失了 我尝试了以下命令: rabbitmqctl eval 'Q = rabbit_misc:r(<<"/">>, queue, &l

RabbitMQ版本3.7.21 Erlang版本Erlang 21.3.8.10

我的团队昨晚有两个节点碰到了内存水印,所以我重建了坏节点,但它使一些队列处于坏状态。我想把它们清理掉,这样我们就可以重新创造它们

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

队列的节点似乎已不存在,因此很遗憾,我无法访问它。它完全消失了

我尝试了以下命令:

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

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

我假设这意味着它试图对不再存在的节点进行RPC调用,但失败了。这对我来说似乎很疯狂,因为不仅节点消失了,而且它已经从集群中被遗忘了,但仍然保留了几个队列。

看起来有3个选项:

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

  • 我们现在将使用选项3,但我确信RabbitMQ最终会有突破性的变化,这将使选项2更具吸引力,但目前快速修复对我来说是最好的。

    看起来。。对你来说,这是唯一的选择。。rabbitmqctl reset,不确定重新创建配置会有多繁琐,但肯定会确保节点sane@SoumenMukherjee这些都是新的例子。我杀死了所有以前的实例,并一次完整地用一台机器重新创建集群。因此,我不确定rabbitmqctl重置会做什么,如果您在docker上运行它,可能会在主机上使用相同的卷,在这种情况下您是否重新创建了卷。没有在docker上运行,这些是全新的EC2实例,RabbitMQ直接安装在它们上。这是否得到解决。。。
    {: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]}]}