Risposte:
Innanzitutto, elenca le tue code:
rabbitmqadmin list queues name
Quindi dall'elenco, dovrai eliminarli manualmente uno per uno:
rabbitmqadmin delete queue name='queuename'
A causa del formato di output, non sembra che tu possa visualizzare la risposta list queues
. In alternativa, se stai solo cercando un modo per cancellare tutto (leggi: ripristina tutte le impostazioni , riportando l'installazione su uno stato predefinito), usa:
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 qualcosa del genere.
Con rabbitmqadmin
puoi rimuoverli con questo one-liner:
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
egrep
, quindi il mio comando sarà simile al seguente:rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
In realtà super facile con plug-in di gestione e criteri:
Goto Management Console (localhost: 15672)
Vai alla scheda Ammin
Vai alla scheda Politiche (sul lato destro)
Aggiungi politica
Riempi i campi
Salva
Prova questo:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
perché l'output è una tabella ASCII con una colonna "name". Ho modificato il comando rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
per risolverlo.
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Se non hai installato rabbitmqadmin, prova a eliminare le code con rabbitmqctl:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
né purge_queue
comandi in rabbitmqctl
. Vorrei eliminare molte code che sembrano essere generate automaticamente e non vorrei installare software extra come rabbitmqadmin
...
rabbitmqctl purge_queue
lavorato qui manualmente. Avevo solo bisogno di aggiungere -p <virtual-host>
delete_queue
e purge_queue
sono disponibili in rabbitmqctl
e li ho appena eseguiti correttamente. Forse sei su una vecchia versione.
Se si sta tentando di eliminare le code perché non sono utilizzate e non si desidera reimpostarle, un'opzione è impostare il TTL della coda molto basso tramite un criterio, attendere che le code vengano eliminate automaticamente una volta passato il TTL e quindi rimuovere la politica ( https://www.rabbitmq.com/ttl.html ).
rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues
Per rimuovere la politica
rabbitmqctl clear_policy delq
Nota che funziona solo per code non utilizzate
Informazioni originali qui: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
Ho creato un deleteRabbitMqQs.sh, che accetta argomenti per la ricerca nell'elenco delle code, selezionando solo quelli che corrispondono allo schema desiderato. Se non offri argomenti, li eliminerà tutti! Ti mostra l'elenco delle code che sta per eliminare, permettendoti di uscire prima di fare qualcosa di distruttivo.
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"
Se si desidera una corrispondenza diversa rispetto agli argomenti passati, è possibile modificare il grep nella riga quattro. Quando si eliminano tutte le code, non verranno eliminate quelle con tre spazi consecutivi, poiché ho pensato che l'eventualità sarebbe più rara rispetto alle persone che hanno rabbitmqctl stampando il suo output in diverse lingue.
Godere!
In Rabbit versione 3.7.10 è possibile eseguire il comando seguente con l'autorizzazione di root:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
Ecco un modo per farlo con PowerShell. potrebbe essere necessario aggiornare l'URL
$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)
}
Puoi usare rabbitmqctl eval come di seguito:
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 ].'
Quanto sopra eliminerà tutte le code vuote in tutti i vhost che hanno un nome che inizia con "prefisso-". È possibile modificare le variabili IfUnused, IfEmpty e MatchRegex secondo le proprie esigenze.
rabbitmqadmin
non è accessibile.
Nel caso in cui desideri solo eliminare le code che non sono vuote (molto più velocemente):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Per me, ci vogliono 2-3 secondi per eliminare una coda (sia vuota che non vuota), quindi iterare attraverso 50 code è un tale dolore mentre ho solo bisogno di eliminarne 10 (40/50 sono vuoti).
Ho provato rabbitmqctl e ripristinato i comandi ma sono molto lenti.
Questo è il modo più veloce che ho trovato (sostituisci il tuo nome utente e password):
#!/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: funziona solo con il vhost predefinito /
Per elencare le code,
./rabbitmqadmin -f tsv -q list queues
Per eliminare una coda,
./rabbitmqadmin delete queue name=name_of_queue
Ecco una versione più veloce (usando parallel
install sudo apt-get install parallel) che si espande sulla risposta eccellente di @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)
Questo comando elimina tutte le tue code
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={}
Questo script è super semplice perché utilizza -f bash
, che genera le code come un elenco.
Quindi usiamo xargs -n1
per dividerlo in più variabili
Quindi usiamo xargs -I{}
che eseguirà il comando seguente e lo sostituiremo {}
nel comando.
http://yourhost:15672/cli/
e scaricarlo.
Non è necessario reimpostare il server rabbitmq per eliminare le code non durevoli . Basta arrestare il server e ricominciare e rimuoverà tutte le code non durevoli disponibili.
Per chi ha un problema con l'installazione di rabbitmqadmin, dovresti prima installare python.
Gli utenti di sistemi operativi simili a UNIX devono copiare rabbitmqadmin in una directory in PATH, ad esempio / usr / local / bin.
Gli utenti Windows dovranno assicurarsi che Python sia sul loro PERCORSO e invocare rabbitmqadmin come python.exe rabbitmqadmin.
Poi
http://{hostname}:15672/cli/rabbitmqadmin
per scaricare.Per elencare le code
python rabbitmqadmin list queues
.
Per eliminare la coda
python rabbitmqadmin delete queue name=Name_of_queue
Per eliminare tutte le code
1- Dichiarare la politica
python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues
2- Rimuovere la politica
python rabbitmqadmin delete policy name='expire_all_policies'
C'è un modo per rimuovere tutte le code e gli scambi senza script e ripristino completo. Puoi semplicemente eliminare e ricreare un host virtuale dall'interfaccia di amministrazione. Questo funzionerà anche per vhost /
.
L'unica cosa che dovrai ripristinare sono le autorizzazioni per il vhost appena creato.
Va bene, qualificatore importante per questa risposta: la domanda richiede di usare rabbitmqctl o rabbitmqadmin per risolvere questo problema, la mia risposta doveva usare entrambi. Inoltre, si noti che questo è stato testato su MacOS 10.12.6 e le versioni del rabbitmqctl e rabbitmqadmin che vengono installati durante l'installazione RabbitMQ con Homebrew e che si identifica con brew list --versions
quanto 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
Un'altra opzione è quella di eliminare il vhost associato alle code. Ciò eliminerà tutto ciò che è associato al vhost, quindi attenzione, ma è facile e veloce.
NOTA: il team RabbitMQ monitora la rabbitmq-users
mailing list e solo a volte risponde alle domande su StackOverflow.
Ho provato i pezzi di codice sopra ma non ho fatto streaming.
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
.
Genero un file che contiene tutti i nomi delle code e lo attraversa riga per riga per eliminarli. Per i loop, while read ...
non l'ha fatto per me. Si fermava sempre al nome della prima coda.
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