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