RabbitMQ-在没有任何使用者的队列中删除了未确认的消息

时间:2018-09-25 19:19:25

标签: rabbitmq queue message

RabbitMQ中有一个备份队列,该队列只是保留旧消息的副本供人类使用。此队列上没有使用者,查看消息的唯一方法是使用“获取消息” UI / API。

问题在于,其中一个用户尝试在启用重新排队的情况下获取超过24k的消息,并且队列进入错误状态。

目前,我看到有24k个未确认消息,但队列中没有任何使用者。

这时我要做的就是清除队列以清除旧消息,但是我无法清除未确认的消息。而且由于没有使用者,因此我不知道可以关闭的任何连接都会使消息恢复为就绪状态。

我可以执行任何管理员操作来清空此队列的内容吗? 如果没有,那么我现在可以做些什么来将消息移回就绪状态吗?

编辑:关于此主题的其他类似问题都吸引了消费者,而我没有,因此他们的解决方案不适用于我。因此,为什么要创建这个新问题。

谢谢

RabbitMQ Screenshot of Unacked Messages

1 个答案:

答案 0 :(得分:1)

  

我可以执行任何管理员操作来清空此队列的内容吗?

是的。只需删除并重新声明队列即可。管理控制台中应该有一个按钮可以为您完成此操作,然后您必须手动重新声明它,并将其重新绑定到交换机。如果您担心丢失其他消息,可以在删除旧消息之前声明一个具有不同名称的新队列。

  

并且由于没有使用者,因此我不知道可以关闭的任何连接都会使消息恢复为就绪状态。

这是一个艰难的过程。用于获取消息的管理命令应该立即“缩小”消息,以将其放回队列(取决于设置)。这可能是一个错误,但是您描述的用例(仅具有一个队列来累积没有使用方的消息)实际上不是有效的用例,因此即使是一个错误,也可能不是一个优先事项。上班的人。

注意,未确认的消息与特定的频道绑定,而不与特定的使用者绑定(我假设但不知道一个事实,管理API的工作原理是:在引擎盖下创建通道)。因此,也有可能通过关闭并重新启动管理插件甚至经纪人(尽管所有赌注都在那里)来重新排队。

以下内容应从this post重新启动管理插件: rabbitmqctl eval 'application:stop(rabbitmq_management).' rabbitmqctl eval 'application:start(rabbitmq_management).'