¿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.

Respuestas:



141

puedes ejecutar este comando directamente

sudo rabbitmqctl purge_queue queue_name

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

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

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)


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

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)

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

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 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.