如何使用CLI从单个队列中删除所有消息?


142

如何使用cli从单个队列中删除所有消息?我有队列名称,我想清理它。

Answers:



140

您可以直接运行此命令

sudo rabbitmqctl purge_queue queue_name

15
或者,如果您有虚拟主机,请这样做rabbitmqctl purge_queue queue_name -p my_virt_host
山羊

4
运行sudo rabbitmqctl -h并检查您当前的Rabbitmq列出的cammand列表。如果不存在,则表示rabbitmq的当前版本不支持此功能。
阿努拉格·in那(Annarag jain)

这对我不起作用-消费者解雇后,队列仍然充满任务。
杰米·伊万诺夫

基于github.com/rabbitmq/rabbitmq-server/pull/215rabbitmq.com/changelog.html,可以在3.5.4或3.6.0中实现。如果您使用的是旧版本,则按照stackoverflow.com/a/18267342/272387的 Rabbitmqadmin 可能会有所帮助。
Richlv '17

1
...并检查github.com/rabbitmq/rabbitmq-server/releases/tag / ...,此功能出现在3.5.4中。
Richlv

16

要清除队列,您可以使用以下命令(API文档中的更多信息):

curl -i -u guest:guest -XDELETE http://localhost:15672/api/queues/vhost_name/queue_name/contents

有点吓人的如何运作。有什么方法可以防止这种情况的发生?例如用于生产服务器的配置是否禁用了此功能以防止意外数据丢失?
以赛亚

是的,保护措施是使用“ delete_user”命令删除用户“ guest”
Ocean Airdrop

16

RabbitMQ实现了高级消息队列协议(AMQP),因此您可以将通用工具用于此类工作。

在Debian / Ubuntu或类似系统上,执行以下操作:

sudo apt-get install amqp-tools
amqp-delete-queue -q celery  # where celery is the name of the queue to delete

对于某些没有Rabbitmqadmin的版本,这是一个很好的解决方案。
2016年

11
这将删除整个队列,而不仅仅是清除它。因此队列不再存在,之后您必须重新初始化空队列。
krob

13

RabbitMQ有2个项目在排队

  1. 删除
  2. 清除

删除-将删除队列

清除-这将清空队列(意味着从队列中删除消息,但队列仍然存在)


1
看起来似乎很简单,但这是我需要的答案。
尼古拉斯·皮克林

8

重要说明:这将删除所有用户和配置。

提醒!

提醒!

除非您要从所有队列(包括用户和配置)中删除数据,否则我不建议使用此答案。只需重置它!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

28
这也会重置您的用户和其他配置!
Codewithcheese

我将其用作单元测试的一部分。例如,我清除了所有内容,然后通过stackoverflow.com/questions/4545660/编程设置了所有内容,然后填充了一些消息并进行了黑盒测试以确保消息通过。为此非常有用。:)
James Oravec

3
真是天真。它不能作为一个严重问题的答案。它将破坏所有服务器数据。
安德烈·帕斯托

2
将存储清零并重新安装操作系统也会删除数据;这不是OP的要求
istepaniuk

5

我想它来晚了,但可以参考pika

import pika
host_ip = #host ip
channel = pika.BlockingConnection(pika.ConnectionParameters(host_ip,
                                                        5672,
                                                        "/",
credentials=pika.PlainCredentials("username","pwd"))).channel()
print "deleting queue..", channel.queue_delete(queue=queue_name)

1
嗨@prajnavantha是pika只有方法清除消息吗?(不删除队列)
Jade Han

2

我已经成功地使用ampq-purgeAMQP-utils的要做到这一点:

git clone https://github.com/dougbarth/amqp-utils.git
cd amqp-utils
# extracted from Rakefile
echo "source 'https://rubygems.org'
gem 'amqp', '~> 0.7.1'
gem 'trollop', '~> 1.16.2'
gem 'facets', '~> 2.9'
gem 'clio', '~> 0.3.0'
gem 'json', '~> 1.5'
gem 'heredoc_unindent', '~> 1.1.2'
gem 'msgpack', '~> 0.4.5'" > Gemfile
bundle install --path=$PWD/gems
export RUBYLIB=.
export GEM_HOME=$PWD/gems/ruby/1.9.1

ruby bin/amqp-purge -v -V /vhost -u user -p queue
# paste password at prompt

2

为了仅从队列中删除消息,请使用:

sudo rabbitmqctl --node <nodename> purge_queue <queue_name>

为了删除一个空(--if-empty)或没有使用者(--if-unused的队列,请使用:

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-empty

要么

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-unused 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.