¿Cómo elimino todos los mensajes de una sola cola usando la CLI?

143

¿Cómo elimino todos los mensajes de una sola cola usando el cli? Tengo el nombre de la cola y quiero limpiarlo.

Bick
fuente

Respuestas:

121

rabbitmqadmin es la herramienta perfecta para esto

rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged
pr4n
fuente
55
Me costó encontrar la herramienta en mi instalación de rabbitmq. Finalmente lo descargué desde aquí: hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_3_5/…
FactualHarmony
55
Si ya tiene instalado el complemento de administración, puede descargarlo dehttp://rabbitserver:15672/cli/
morloch
141

puedes ejecutar este comando directamente

sudo rabbitmqctl purge_queue queue_name
Anurag jain
fuente
15
o, si tiene un host virtual, hágalorabbitmqctl purge_queue queue_name -p my_virt_host
cabra
44
ejecute sudo rabbitmqctl -h y verifique la lista de cammand listada por su rabbitmq actual. Si no está allí, significa que la versión actual de rabbitmq no es compatible con esta función.
Anurag jain
Esto no funcionó para mí: tan pronto como mi consumidor se encendió, la cola todavía estaba llena de tareas.
Jamie Ivanov
Esto podría haberse implementado en 3.5.4 o 3.6.0, basado en github.com/rabbitmq/rabbitmq-server/pull/215 y rabbitmq.com/changelog.html . Si tiene una versión anterior, rabbitmqadmin según stackoverflow.com/a/18267342/272387 podría ayudar.
Richlv
1
... y revisando github.com/rabbitmq/rabbitmq-server/releases/tag/… , esta característica apareció en 3.5.4.
Richlv
16

Para purgar la cola puede usar el siguiente comando (más información en el documento de API):

curl -i -u guest:guest -XDELETE http://localhost:15672/api/queues/vhost_name/queue_name/contents
Olga
fuente
Da miedo lo bien que funcionó. ¿Alguna forma de protegerse contra esto sin querer? ¿Tal como una configuración para servidores de producción que deshabilita esta funcionalidad para evitar la pérdida accidental de datos?
Isaías
Sí, la protección sería eliminar al usuario "invitado" utilizando el comando "delete_user"
Ocean Airdrop
16

RabbitMQ implementa el Protocolo avanzado de colas de mensajes (AMQP) para que pueda usar herramientas genéricas para cosas como esta.

En Debian / Ubuntu o sistema similar, haga:

sudo apt-get install amqp-tools
amqp-delete-queue -q celery  # where celery is the name of the queue to delete
benjaoming
fuente
Esa es una buena solución para algunas versiones que no tienen rabbitmqadmin.
WisZhou
11
Esto elimina toda la cola, no solo la purga. Por lo tanto, la cola ya no existe y luego debe reinicializar la cola vacía.
krob
13

RabbitMQ tiene 2 cosas en cola

  1. Eliminar
  2. Purga

Eliminar: eliminará la cola

Purga: esto vaciará la cola (lo que significa que elimina los mensajes de la cola pero la cola aún existe)

Guru Prasad
fuente
1
Puede parecer simple, pero esta fue la respuesta que necesitaba.
Nick Pickering el
8

NOTA IMPORTANTE: Esto eliminará todos los usuarios y configuraciones.

ALERTA !!

ALERTA !!

No sugiero esta respuesta hasta que desee eliminar datos de todas las colas, incluidos los usuarios y las configuraciones. ¡Solo reinícialo!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
naren
fuente
28
¡Eso también restablece sus usuarios y otras configuraciones!
Codewithcheese
Usé esto como parte de las pruebas unitarias. por ejemplo, borro todo, luego lo configuro todo programáticamente a través de stackoverflow.com/questions/4545660/…, luego relleno algunos mensajes y hago pruebas de recuadro negro para asegurarme de que los mensajes pasaron. Funciona muy bien para este propósito. :)
James Oravec
3
Es realmente ingenuo. No es aceptable como respuesta a una pregunta seria. Destruirá todos los datos del servidor.
Andre Pastore el
2
poner a cero su almacenamiento y reinstalar el sistema operativo también elimina los datos; esto no es lo que OP pregunta
istepaniuk 05 de
5

Supongo que es tarde, pero para referencia de otros, esto se puede hacer con 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)
prajnavantha
fuente
1
hola @prajnavantha es pika tiene algún método mensaje claro solamente? (no eliminar cola)
Jade Han
2

He utilizado con éxito ampq-purgedesde amqp-utils para hacer esto:

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
andrewdotn
fuente
2

Para eliminar solo los mensajes de la cola, use:

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

Para eliminar una cola que está vacía ( - si está vacía ) o no tiene consumidores ( - si no se usa) use:

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

o

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-unused 
Ashwani Singh
fuente