open how exchange enable create configurar change and rabbitmq rabbitmqctl

how - rabbitmq create queue



¿Eliminar todas las colas de RabbitMQ? (17)

Instalé rabbitmqadmin y pude enumerar todos los intercambios y colas. ¿Cómo puedo usar rabbitmqadmin o rabbitmqctl para eliminar todas las colas?


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) }


Aquí hay una versión más rápida (usando sudo de instalación parallel apt-get install parallel) expandiendo 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)


Con rabbitmqadmin puedes eliminarlos con este one-liner:

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


De acuerdo, calificador importante para esta respuesta: la pregunta sí pide usar rabbitmqctl O rabbitmqadmin para resolver esto, mi respuesta necesitaba usar ambas. 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 está identificado con brew list --versions como 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


Eliminando todas las colas usando rabbitmqctl one liner

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


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í, demora 2-3 segundos para purgar una cola (tanto vacía como no vacía), por lo que iterar a través de 50 colas es un gran dolor, mientras que solo necesito purgar 10 de ellas (40/50 están vacías).


Este comando borra 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 saca las colas como una lista.

Luego usamos xargs -n1 para dividirlo en múltiples variables

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


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

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


Hice un deleteRabbitMqQs.sh, que acepta argumentos para buscar en la lista de colas, seleccionando solo aquellas que coincidan 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, lo que le permite abandonar 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 ingresa, puede alterar el grep en la línea cuatro. Al eliminar todas las colas, no eliminará aquellas con tres espacios consecutivos en ellas, porque pensé que la eventualidad sería más rara que las personas que tienen la impresión de la salida de rabbitmqctl en diferentes idiomas.

¡Disfrutar!


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 / predeterminado


No necesita reiniciar el servidor rabbitmq para eliminar colas no duraderas . Simplemente detenga el servidor y vuelva a comenzar, y eliminará todas las colas no duraderas disponibles.


Primero, enumera tus 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 aparece, puede grep la respuesta de las list queues . Alternativamente, si solo está buscando una manera de borrar todo (léase: restablecer todas las configuraciones , devolver la instalación a un estado predeterminado), use:

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


Prueba esto:

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


Puedes usar rabbitmqctl eval como a continuación:

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 su requisito.


Si está intentando eliminar colas porque no están en uso y no desea restablecerlas, una opción es configurar la cola TTL muy baja a través de una política, espere a que las colas se eliminen automáticamente una vez que se pase 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


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

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


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