RabbitMQ版本3.7.21Erlang版本Erlang 21.3.8.10
我的团队昨晚有2个节点达到了内存水印,因此我重建了坏节点,但它使一些队列处于坏状态。我想清除它们,以便我们可以重新创建它们。
统计数据显示就绪,未确认和总计的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).'
但出现此错误:
{: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调用。在我看来,这很疯狂,因为不仅节点消失了,而且集群中的节点也将其遗忘了,但仍然剩下几个队列。
似乎有3个选项:
[我们现在将继续使用选项3,但我敢肯定,RabbitMQ最终将发生重大变化,这将使选项2更具吸引力,但目前,快速修复最适合我。