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

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

194390 次浏览

Rabbitmqadmin 是完美的工具

rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged

重要提示: 这将删除所有用户和配置。

警报! !

警报! !

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

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

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

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

我已经成功地使用 Amqp-utils中的 ampq-purge来做到这一点:

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

我想现在已经很晚了,但是对于其他人来说,这可以用鼠兔来完成

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)

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
amqp-declare-queue -d -q celery # where celery is the name of the queue to delete and the "-d" creates a durable/persistent queue

编辑2022: 在示例中添加了 amqp-Declaration-queue

您可以直接运行此命令

sudo rabbitmqctl purge_queue queue_name

RabbitMQ 有两件事情需要处理

  1. 删除
  2. 清除

删除-将删除队列

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

为了从队列中使用 只删除邮件:

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

为了使 删除队列为空(- 如果-空的)或没有消费者(- 如果-不用)使用:

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

或者

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

如果你正在使用 RabbitMQ 和 Docker,你的步骤应该是:

  1. 连接到 Container: docker exec-it your _ Container _ id bash
  2. Rabbitmqctl purge _ queue Queue-1(其中 Queue-1是队列名)

我的 rabbitmqclt是一个没有 purge _ queue 的旧版本,而且我没有安装 rabbitmqadmin

我们的应用程序运行在芹菜上,它有这样一个命令:

celery -A <app_name> -Q <queue_name> purge