How do I delete all messages from a single queue using the cli? I have the queue name and I want to clean it.
11 Answers
you can directly run this command
sudo rabbitmqctl purge_queue queue_name 5rabbitmqadmin is the perfect tool for this
rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged 3RabbitMQ 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)
1To purge queue you can use following command (more information in API doc):
curl -i -u guest:guest -XDELETE 2RabbitMQ 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
3IMPORTANT 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 3In 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 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) 1In 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)
I have successfully used ampq-purge from amqp-utils to do this:
git clone cd amqp-utils # extracted from Rakefile echo "source ' 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 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