How do I delete all messages from a single queue using the CLI?
How do I delete all me开发者_如何学JAVAssages from a single queue using the cli? I have the queue name and I want to clean it.
you can directly run this command
sudo rabbitmqctl purge_queue queue_name
rabbitmqadmin is the perfect tool for this
rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged
RabbitMQ has 2 things under queue
- Delete
- Purge
Delete - will delete the queue
Purge - This will empty the queue (meaning removes messages from the queue but queue still exists)
To purge queue you can use following command (more information in API doc):
curl -i -u guest:guest -XDELETE http://localhost:15672/api/queues/vhost_name/queue_name/contents
RabbitMQ implements the Advanced Message Queuing Protocol (AMQP) so you can use generic tools for stuff like this.
On Debian/Ubuntu or similar system, do:
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
Edit 2022: Added amqp-declare-queue to the example
IMPORTANT NOTE: This will delete all users and config.
ALERT !!
ALERT !!
I don't suggest this answer until unless you want to delete data from all of the queues, including users and configs. Just Reset it !!!
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
I guess its late but for others reference, this can be done with 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)
In order to delete only messages from the queue use :
sudo rabbitmqctl --node <nodename> purge_queue <queue_name>
In order to delete a queue which is empty(--if-empty) or has no consumers(--if-unused) use :
sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-empty
or
sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-unused
I have successfully used ampq-purge
from amqp-utils to do this:
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
In case you are using RabbitMQ with Docker your steps should be:
- Connect to container: docker exec -it your_container_id bash
- rabbitmqctl purge_queue Queue-1 (where Queue-1 is queue name)
My rabbitmqclt
was an older version without purge_queue, and I did not have rabbitmqadmin
installed.
Our app runs on celery and it has this command that worked:
celery -A <app_name> -Q <queue_name> purge
精彩评论