1

我们有一个问题,有时,一个动态铲子(通过 HTTP API 创建:)/api/parameters/shovel/设置src-delete-afterqueue-length完成,然后没有被删除,而是卡在终止状态。

后续尝试通过以下任一方法删除铲子均不成功:

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

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

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

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

谢谢!

PS:

  1. RabbitMQ 版本:3.4.4
  2. 运行一个 2 节点集群(由于在网络分区的情况下我们可能面临的明显问题,很快将使其成为 3 节点集群)。

RabbitMQ 铲子卡在“终止”状态

4

2 回答 2

2

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

于 2018-06-29T15:34:55.117 回答
0

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

问题发生的一种可能方式:

  • 3节点HA集群
  • 重启其中一个节点(/etc/init.d/rabbitmq-server restart)
  • 旧铲子和旧队列不知何故复活了

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

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

至于复活的旧队列(随机发生而不触及任何东西......我称它们为“僵尸”队列),这个问题大约每月发生一次,所以我创建了 PostMan 脚本来删除复活的队列。多年来,这一直是个问题。我们升级了 RMQ,希望能解决这个问题……但事实并非如此。也许 Quorum 队列是一个更强大的解决方案?如果我有更多的时间来调查/实验,我会的,但我会埋头于具有更高优先级的眼球。

于 2020-07-07T00:05:57.373 回答