RabbitMQ - 删除了没有任何消费者的队列上的未确认消息
RabbitMQ - Removed unacked messages on a queue that does not have any consumers
我们在 RabbitMQ 中有一个备份队列,它只保留旧消息的副本以供人类使用。此队列上没有消费者,查看消息的唯一方法是使用获取消息 UI/API.
问题是其中一位用户试图在启用重新排队的情况下获取超过 24k 条消息,但队列进入了错误状态。
目前我看到有 24k unacked 消息,但队列中没有任何消费者。
此时我只想清除队列以清除旧消息,但我无法清除未确认的消息。而且由于没有消费者,我不知道我可以关闭的任何连接都会将消息移回就绪状态。
我可以执行任何管理操作来清空此队列的内容吗?
如果没有,我现在可以做些什么来将消息移回就绪状态吗?
编辑: 关于这个主题的其他类似问题都有消费者而我没有,所以他们的解决方案不适用于我。因此,为什么我将其创建为一个新问题。
谢谢
RabbitMQ Screenshot of Unacked Messages
Is there any Admin action I can do to empty out the contents of this queue?
是的。只需删除并重新声明队列即可。管理控制台中应该有一个按钮可以为您执行此操作,然后您必须手动重新声明它并将其重新绑定到交易所。如果您担心丢失其他消息,可以在删除旧队列之前声明一个不同名称的新队列。
And since there are no consumers, I am not aware of any connection that I can close which would move the messages back into ready status.
这是一个艰难的过程。获取消息的管理命令应该立即 "nack" 将消息放回队列中(取决于设置)。这可能是一个错误,但是您描述的用例(只是有一个没有消费者累积消息的队列)并不是一个真正有效的用例,所以即使它是一个错误,它也可能不是一个很大的优先级有人上班。
注意 unacked 消息绑定到特定的 channel 而不是特定的消费者(我假设,但不知道事实上,管理 API 通过在引擎盖下创建一个频道来工作)。因此,也可以通过关闭并重新启动管理插件,甚至可能是代理来重新排队(尽管所有的赌注都在那里)。
从 this post 开始,以下应重新启动管理插件:
rabbitmqctl eval 'application:stop(rabbitmq_management).'
rabbitmqctl eval 'application:start(rabbitmq_management).'
我们在 RabbitMQ 中有一个备份队列,它只保留旧消息的副本以供人类使用。此队列上没有消费者,查看消息的唯一方法是使用获取消息 UI/API.
问题是其中一位用户试图在启用重新排队的情况下获取超过 24k 条消息,但队列进入了错误状态。
目前我看到有 24k unacked 消息,但队列中没有任何消费者。
此时我只想清除队列以清除旧消息,但我无法清除未确认的消息。而且由于没有消费者,我不知道我可以关闭的任何连接都会将消息移回就绪状态。
我可以执行任何管理操作来清空此队列的内容吗? 如果没有,我现在可以做些什么来将消息移回就绪状态吗?
编辑: 关于这个主题的其他类似问题都有消费者而我没有,所以他们的解决方案不适用于我。因此,为什么我将其创建为一个新问题。
谢谢
RabbitMQ Screenshot of Unacked Messages
Is there any Admin action I can do to empty out the contents of this queue?
是的。只需删除并重新声明队列即可。管理控制台中应该有一个按钮可以为您执行此操作,然后您必须手动重新声明它并将其重新绑定到交易所。如果您担心丢失其他消息,可以在删除旧队列之前声明一个不同名称的新队列。
And since there are no consumers, I am not aware of any connection that I can close which would move the messages back into ready status.
这是一个艰难的过程。获取消息的管理命令应该立即 "nack" 将消息放回队列中(取决于设置)。这可能是一个错误,但是您描述的用例(只是有一个没有消费者累积消息的队列)并不是一个真正有效的用例,所以即使它是一个错误,它也可能不是一个很大的优先级有人上班。
注意 unacked 消息绑定到特定的 channel 而不是特定的消费者(我假设,但不知道事实上,管理 API 通过在引擎盖下创建一个频道来工作)。因此,也可以通过关闭并重新启动管理插件,甚至可能是代理来重新排队(尽管所有的赌注都在那里)。
从 this post 开始,以下应重新启动管理插件:
rabbitmqctl eval 'application:stop(rabbitmq_management).'
rabbitmqctl eval 'application:start(rabbitmq_management).'