Respuestas:
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
rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
grep $'\t0'
o algo.
Con rabbitmqadmin
usted puede eliminarlos con este one-liner:
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
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
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
Salvar
Prueba esto:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
porque 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=qn
para arreglarlo.
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Si no tiene rabbitmqadmin instalado, intente purgar las colas con rabbitmqctl:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
ni purge_queue
comandos en rabbitmqctl
. Me gustaría eliminar muchas colas que parecen generarse automáticamente y no me gustaría instalar software adicional como rabbitmqadmin
...
rabbitmqctl purge_queue
Trabajó aquí manualmente. Solo necesitaba agregar -p <virtual-host>
delete_queue
y purge_queue
están disponibles en rabbitmqctl
y acabo de ejecutar con éxito. Quizás estés en una versión antigua.
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
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!
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
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)
}
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.
rabbitmqadmin
no es accesible.
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).
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
Para enumerar colas,
./rabbitmqadmin -f tsv -q list queues
Para eliminar una cola,
./rabbitmqadmin delete queue name=name_of_queue
Aquí hay una versión más rápida (usando parallel
install 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)
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 -n1
para dividir eso en múltiples variables
Luego usamos xargs -I{}
que ejecutará el siguiente comando y lo reemplazaremos {}
en el comando.
http://yourhost:15672/cli/
y descargarlo.
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.
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
http://{hostname}:15672/cli/rabbitmqadmin
para descargar.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'
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.
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 --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
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-users
lista de correo y solo a veces responde preguntas sobre StackOverflow.
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.
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname
rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged