RabbitMQ铁锹卡在“已终止”状态

时间:2018-06-27 15:22:58

标签: rabbitmq rabbitmq-shovel

我们有一个问题,有时将/api/parameters/shovel/设置为src-delete-after的动态铲(通过HTTP API:queue-length创建)完成,然后不删除,处于终止状态。

随后通过以下任何一种方法删除铁锹的尝试均未成功:

  1. DELETE发布到/api/parameters/shovel/
  2. rabbitmqctl delete_shovel
  3. rabbitmqctl clear_parameter -p <vhost> shovel <shovel_name>

铲子甚至没有出现在RabbitMQ管理界面的“铲子管理”部分。

我们唯一可以摆脱卡住的铁锹的方法是重新启动RabbitMQ。

还有其他人遇到这个问题吗?如果是这样,我们如何清除铲子而不必重新启动集群?另外,是否可以通过配置防止这种情况发生?

谢谢!

PS:

  1. RabbitMQ版本:3.4.4
  2. 运行一个2节点群集(由于网络分区的情况我们可能会遇到明显的问题,因此很快将其变成3节点群集)。

RabbitMQ Shovel Stuck in 'Terminated' Status

2 个答案:

答案 0 :(得分:1)

您正在使用非常非常旧的RabbitMQ版本。请升级到最新版本(3.7.6),并确保使用Erlang 20.3.X(而非21)。如果您仍然可以重现此问题,请在rabbitmq-users邮件列表中进行报告。

答案 1 :(得分:0)

我们正在使用RMQ 3.7.13,Erlang 21.3.1。

一种可能出现问题的方式:

  • 3节点HA群集
  • 重新启动节点之一(/etc/init.d/rabbitmq服务器重新启动)
  • 旧铲子和旧队列以某种方式复活

不能使用问题中提到的任何方法删除铲子。 我能够删除铲子的唯一方法是在集群中的所有3个节点上禁用铲子插件,然后重新启用每个节点上的每个插件,如下所示:

rabbitmq-plugins disable rabbit_shovel
rabbitmq-plugins enable rabbit_shovel
rabbitmq-plugins enable rabbit_shovel_management

就恢复旧队列(偶然不碰任何东西...我称它们为“僵尸”队列)而言,这个问题大约每月发生一次,因此我创建了PostMan脚本来删除恢复的队列。多年来一直是一个问题。我们升级了RMQ,希望可以解决此问题……但事实并非如此。仲裁队列也许是一个更强大的解决方案?如果我有更多的时间进行研究/实验,我会的,但是我会更加重视自己的工作。