¿Eliminar todas las colas de RabbitMQ?


189

Instalé rabbitmqadminy pude enumerar todos los intercambios y colas. ¿Cómo puedo usar rabbitmqadmino rabbitmqctleliminar todas las colas?

Respuestas:


271

Primero, enumere sus colas:

rabbitmqadmin list queues name

Luego, de la lista, deberá eliminarlos manualmente uno por uno:

rabbitmqadmin delete queue name='queuename'

Debido al formato de salida, no parece que pueda obtener la respuesta list queues. Alternativamente, si solo está buscando una forma de borrar todo (leer: restablecer todas las configuraciones , regresar la instalación a un estado predeterminado), use:

rabbitmqctl stop_app
rabbitmqctl reset    # Be sure you really want to do this!
rabbitmqctl start_app

44
para ver todas las tareas pendientes en rabbitmq:rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged
Guillaume Vincent

2
Tenga en cuenta que "reset de rabbitmqctl" restablecerá todo a la "configuración de fábrica". Cualquier usuario de RabbitMQ, hosts virtuales, etc., que haya creado quedará impresionado.
Thoufek

Disculpas @ smartnut007, he aclarado la segunda parte de la respuesta con un descargo de responsabilidad.
lukiffer

25
solo agarrando las colas vacías. rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
au_stan

44
@au_stan Eso eliminará todas las colas con un 0 en el nombre o el recuento. Puede querer hacer grep $'\t0'o algo.
woot

51

Con rabbitmqadminusted puede eliminarlos con este one-liner:

rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done

En mi caso, las colas tienen como prefijo una palabra clave por la que simplemente puedo usar egrep, por lo que mi comando se verá así:rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
Logans

49

Realmente súper fácil con plugins de administración y políticas:

  • Goto Management Console (localhost: 15672)

  • Ir a la pestaña Admin

  • Ir a la pestaña Políticas (en el lado derecho)

  • Agregar política

  • Rellenar campos

    • Host virtual: seleccione
    • Nombre: Caduca todas las políticas (Eliminar más tarde)
    • Patrón:. *
    • Aplicar a: colas
    • Definición: caduca con el valor 1 (cambie el tipo de Cadena a Número)
  • Salvar

  • Pagar la pestaña Colas nuevamente
  • Todas las colas deben ser eliminadas
  • Y no olvides eliminar la política !!!!!! .

1
seleccione "Número" en Definición. No funciona con el valor predeterminado ("Cadena")
Mathias

Gran respuesta, realmente me compensó el día. Si selecciona "Intercambios y colas" de la lista, puede eliminar fácilmente tanto las Colas como los Intercambios. Desearía que esta pudiera ser la respuesta aceptada.
Wiktor Zychla

Solución muy limpia, sin la necesidad de jugar alrededor de la instancia SSH.
acidburn23

Lástima que nadie se explica cómo instalar políticas de complementos de gestión y
gelonida

@MesutA. Muchas gracias. Creo que es bueno tener este enlace en este artículo. Podría ser aún mejor agregarlo a la respuesta, ya que los comentarios podrían ser eliminados. Pero ahora tengo al menos esta información
gelonida

19

Prueba esto:

 rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn

2
Esto funcionó para mí, pero también se mostró *** Not found: /api/queues/%2F/nameporque el resultado es una tabla ASCII con una columna "nombre". Modifiqué el comando rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qnpara arreglarlo.
Mark Edington

rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Scott Leonard

9

Si no tiene rabbitmqadmin instalado, intente purgar las colas con rabbitmqctl:

rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue


No hay delete_queueni purge_queuecomandos en rabbitmqctl. Me gustaría eliminar muchas colas que parecen generarse automáticamente y no me gustaría instalar software adicional como rabbitmqadmin...
Rolice

rabbitmqctl purge_queueTrabajó aquí manualmente. Solo necesitaba agregar -p <virtual-host>
Roman Susi

Contrariamente a lo que se ha dicho anteriormente @Rolice, tanto delete_queuey purge_queueestán disponibles en rabbitmqctly acabo de ejecutar con éxito. Quizás estés en una versión antigua.
Richard Dunn

Es bueno escuchar eso, estos podrían haberse agregado recientemente.
Rolice

7

Si está tratando de eliminar colas porque no se utilizan y no desea restablecer, una opción es establecer el TTL de cola muy bajo a través de una política, espere a que las colas se eliminen automáticamente una vez que se pasa el TTL y luego elimine la política ( https://www.rabbitmq.com/ttl.html ).

rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues

Para eliminar la política

rabbitmqctl clear_policy delq

Tenga en cuenta que esto solo funciona para colas no utilizadas

Información original aquí: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html


6

Hice un deleteRabbitMqQs.sh, que acepta argumentos para buscar en la lista de colas, seleccionando solo los que coinciden con el patrón que desea. Si no ofrece argumentos, los eliminará a todos. Le muestra la lista de colas que está a punto de eliminar, permitiéndole salir antes de hacer algo destructivo.

for word in "$@"
do
        args=true
        newQueues=$(rabbitmqctl list_queues name | grep "$word")
        queues="$queues
$newQueues"
done
if [ $# -eq 0 ]; then
        queues=$(rabbitmqctl list_queues name | grep -v "\.\.\.")
fi

queues=$(echo "$queues" | sed '/^[[:space:]]*$/d')

if [ "x$queues" == "x" ]; then
        echo "No queues to delete, giving up."
        exit 0
fi

read -p "Deleting the following queues:
${queues}
[CTRL+C quit | ENTER proceed]
"

while read -r line; do
        rabbitmqadmin delete queue name="$line"
done <<< "$queues"

Si desea una coincidencia diferente con los argumentos que pasa, puede alterar el grep en la línea cuatro. Al eliminar todas las colas, no eliminará las que tengan tres espacios consecutivos en ellas, porque pensé que la eventualidad sería más rara que las personas que tienen rabbitmqctl imprimiendo su salida en diferentes idiomas.

¡Disfrutar!


6

En Rabbit versión 3.7.10 puede ejecutar el siguiente comando con permiso de root:

rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue

5

Aquí hay una manera de hacerlo con PowerShell. la URL puede necesitar ser actualizada

$cred = Get-Credential
 iwr -ContentType 'application/json' -Method Get -Credential $cred   'http://localhost:15672/api/queues' | % { 
    ConvertFrom-Json  $_.Content } | % { $_ } | ? { $_.messages -gt 0} | % {
    iwr  -method DELETE -Credential $cred  -uri  $("http://localhost:15672/api/queues/{0}/{1}" -f  [System.Web.HttpUtility]::UrlEncode($_.vhost),  $_.name)
 }

Tenga en cuenta que esto solo elimina las colas no vacías. Elimine la cláusula -gt para eliminar todas las colas
Peter Goodman

4

Puede usar rabbitmqctl eval de la siguiente manera:

rabbitmqctl eval 'IfUnused = false, IfEmpty = true, MatchRegex = 
<<"^prefix-">>, [rabbit_amqqueue:delete(Q, IfUnused, IfEmpty) || Q <- 
rabbit_amqqueue:list(), re:run(element(4, element(2, Q)), MatchRegex) 
=/= nomatch ].' 

Lo anterior eliminará todas las colas vacías en todos los vhosts que tengan un nombre que comience con "prefijo-". Puede editar las variables IfUnused, IfEmpty y MatchRegex según sus requisitos.


Perfecto para cuando rabbitmqadminno es accesible.
NuSkooler

Encontré esto mucho más rápido que list_queues
TerrenceSun

3

Eliminando todas las colas usando rabbitmqctl one liner

rabbitmqctl list_queues | awk '{ print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue

2

En caso de que solo desee purgar las colas que no están vacías (mucho más rápido):

rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue

Para mí, me toma 2-3 segundos purgar una cola (tanto vacías como no vacías), por lo que iterar a través de 50 colas es un dolor, mientras que solo necesito purgar 10 de ellas (40/50 están vacías).


2

Intenté los comandos rabbitmqctl y reset pero son muy lentos.

Esta es la forma más rápida que encontré (reemplace su nombre de usuario y contraseña):

#!/bin/bash

# Stop on error
set -eo pipefail

USER='guest'
PASSWORD='guest'

curl -sSL -u $USER:$PASSWORD http://localhost:15672/api/queues/%2f/ | jq '.[].name' | sed 's/"//g' | xargs -L 1 -I@ curl -XDELETE -sSL -u $USER:$PASSWORD http://localhost:15672/api/queues/%2f/@
# To also delete exchanges uncomment next line
# curl -sSL -u $USER:$PASSWORD http://localhost:15672/api/exchanges/%2f/ | jq '.[].name' | sed 's/"//g' | xargs -L 1 -I@ curl -XDELETE -sSL -u $USER:$PASSWORD http://localhost:15672/api/exchanges/%2f/@

Nota: Esto solo funciona con el vhost / default


2

Para enumerar colas,

./rabbitmqadmin -f tsv -q list queues

Para eliminar una cola,

./rabbitmqadmin delete queue name=name_of_queue

1

Aquí hay una versión más rápida (usando parallelinstall sudo apt-get install parallel) ampliando la excelente respuesta de @admenva

parallel -j 50 rabbitmqadmin -H YOUR_HOST_OR_LOCALHOST -q delete queue name={} ::: $(rabbitmqadmin -H YOUR_HOST_OR_LOCALHOST -f tsv -q list queues name)


1

Este comando elimina todas tus colas

python rabbitmqadmin.py \
  -H YOURHOST -u guest -p guest -f bash list queues | \
xargs -n1 | \
xargs -I{} \
  python rabbitmqadmin.py -H YOURHOST -u guest -p guest delete queue name={}

Este script es súper simple porque usa -f bash, que genera las colas como una lista.

Luego usamos xargs -n1para dividir eso en múltiples variables

Luego usamos xargs -I{}que ejecutará el siguiente comando y lo reemplazaremos {}en el comando.


He intentado como 10 respuestas diferentes, y esto es lo ÚNICO que realmente ha funcionado para eliminar colas sin eliminar todas mis otras configuraciones. ¡Gracias! No puedo creer que rabbitmqctl no solo tenga el comando "soltar todas las colas".
sudo

Por cierto, para obtener rabbitmqadmin, debe ir http://yourhost:15672/cli/y descargarlo.
sudo

1

No necesita restablecer el servidor rabbitmq para eliminar colas no duraderas . Simplemente detenga el servidor y comience de nuevo y eliminará todas las colas no duraderas disponibles.


incluyendo colas duraderas? No lo creo. Calificaré tu respuesta.
Hendy Irawan

No, las colas duraderas no se pueden eliminar deteniendo el servidor. Se pueden eliminar de la interfaz web de RabbitMQ Management en colas.
ErAcube

En realidad sí, esto me ayudó y todas las 4500 colas generadas automáticamente desaparecieron. Parece que estos no eran duraderos. ¡Gracias!
Rolice

1

Para aquellos que tienen un problema con la instalación de rabbitmqadmin, primero debe instalar python.

Los usuarios de sistemas operativos tipo UNIX necesitan copiar rabbitmqadmin a un directorio en PATH, por ejemplo / usr / local / bin.

Los usuarios de Windows deberán asegurarse de que Python esté en su RUTA e invocar rabbitmqadmin como python.exe rabbitmqadmin.

Luego

  1. Navegue http://{hostname}:15672/cli/rabbitmqadminpara descargar.
  2. Vaya a la carpeta que contiene y luego ejecute cmd con privilegio de administrador

Para enumerar colas python rabbitmqadmin list queues .

Para eliminar la cola python rabbitmqadmin delete queue name=Name_of_queue

Para eliminar todas las colas

1- Declarar política

python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues

2- Eliminar la política

python rabbitmqadmin  delete policy name='expire_all_policies'

0

Hay una manera de eliminar todas las colas e intercambios sin scripts y reinicio completo. Simplemente puede eliminar y volver a crear un host virtual desde la interfaz de administración. Esto funcionará incluso para vhost /.

Lo único que necesitará restaurar son los permisos para el vhost recién creado.


0

De acuerdo, calificador importante para esta respuesta: la pregunta pide usar rabbitmqctl O rabbitmqadmin para resolver esto, mi respuesta necesitaba usar ambos. Además, tenga en cuenta que esto se probó en MacOS 10.12.6 y las versiones de rabbitmqctl y rabbitmqadmin que se instalan al instalar rabbitmq con Homebrew y que se identifica brew list --versionscomo rabbitmq 3.7.0

rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname


0

Otra opción es eliminar el vhost asociado con las colas. Esto eliminará todo lo relacionado con el vhost, así que ten cuidado, pero es fácil y rápido.


NOTA: el equipo de RabbitMQ supervisa la rabbitmq-userslista de correo y solo a veces responde preguntas sobre StackOverflow.


0

Probé las piezas de código anteriores pero no hice ninguna transmisión.

sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done.

Genero un archivo que contiene todos los nombres de la cola y los recorre línea por línea para eliminarlos. Para los bucles, while read ...no lo hizo por mí. Siempre se detenía en el primer nombre de la cola.


-1
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname

1
Recibo esto cuando lo ejecuto: cabeza: cuenta de línea ilegal - -1
Robert Ross

La "cabeza -n-1" debe ser "cabeza -1" o "cabeza -n 1"
Gerd Busker
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.