Eliminare tutte le code da RabbitMQ?


189

Ho installato rabbitmqadmined è stato in grado di elencare tutti gli scambi e le code. Come posso usare rabbitmqadmino rabbitmqctleliminare tutte le code.

Risposte:


271

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

4
per vedere tutti i compiti in sospeso in rabbitmq:rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged
Guillaume Vincent

2
Tenere presente che "reset di rabbitmqctl" ripristinerà tutto alle "impostazioni di fabbrica". Tutti gli utenti RabbitMQ, host virtuali, ecc. Creati dall'utente verranno spazzati via.
Thoufek,

Mi scuso @ smartnut007, ho chiarito la seconda parte della risposta con una dichiarazione di non responsabilità.
lukiffer,

24
solo afferrando le code vuote. rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
au_stan,

4
@au_stan Questo eliminerà tutte le code con uno 0 nel nome o nel conteggio. Potrebbe voler fare grep $'\t0'o qualcosa del genere.
woot

51

Con rabbitmqadminpuoi rimuoverli con questo one-liner:

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

Nel mio caso le code sono precedute da una parola chiave che posso semplicemente usare 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
Logans

49

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

    • Host virtuale: selezionare
    • Nome: Scadenza di tutte le politiche (elimina più tardi)
    • Modello:. *
    • Applica a: Code
    • Definizione: scade con il valore 1 (cambia tipo da Stringa a Numero)
  • Salva

  • Scheda Coda di pagamento
  • Tutte le code devono essere eliminate
  • E non dimenticare di rimuovere la politica !!!!!! .

1
seleziona "Numero" in Definizione. Non funziona con il valore predefinito ("String")
Mathias,

Ottima risposta, in realtà ha compensato la mia giornata. Se si seleziona "Scambi e code" dall'elenco, è possibile eliminare facilmente sia le code che gli scambi. Vorrei che questa potesse essere la risposta accettata.
Wiktor Zychla,

Soluzione molto pulita, senza la necessità di giocare con l'istanza SSH.
acidburn23

Peccato che nessuno spieghi come installare plug-in di gestione e politiche
gelonida

@MesutA. Molte grazie. Penso che sia buono avere questo link in questo articolo. Potrebbe essere ancora meglio aggiungerlo alla risposta, poiché i commenti potrebbero essere eliminati. Ma ora ho almeno questa informazione
gelonida,

19

Prova questo:

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

2
Questo ha funzionato per me, ma ha anche dimostrato *** Not found: /api/queues/%2F/nameperché 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=qnper risolverlo.
Mark Edington,

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

9

Se non hai installato rabbitmqadmin, prova a eliminare le code con rabbitmqctl:

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


Non ci sono delete_queuepurge_queuecomandi in rabbitmqctl. Vorrei eliminare molte code che sembrano essere generate automaticamente e non vorrei installare software extra come rabbitmqadmin...
Rolice

rabbitmqctl purge_queuelavorato qui manualmente. Avevo solo bisogno di aggiungere -p <virtual-host>
Roman Susi il

Contrariamente a quanto affermato in precedenza da @Rolice, entrambi delete_queuee purge_queuesono disponibili in rabbitmqctle li ho appena eseguiti correttamente. Forse sei su una vecchia versione.
Richard Dunn,

Buono a sapersi, questi avrebbero potuto essere aggiunti di recente.
Rolice,

7

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


6

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!


6

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

5

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

Nota, questo elimina solo le code non vuote. Rimuovi la clausola -gt per eliminare tutte le code
Peter Goodman,

4

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.


Perfetto per quando rabbitmqadminnon è accessibile.
NuSkooler,

L'ho trovato molto più veloce di list_queues
TerrenceSun

3

Rimozione di tutte le code usando rabbitmqctl una riga

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

2

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


2

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 /


2

Per elencare le code,

./rabbitmqadmin -f tsv -q list queues

Per eliminare una coda,

./rabbitmqadmin delete queue name=name_of_queue

1

Ecco una versione più veloce (usando parallelinstall 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)


1

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.


Ho provato come 10 risposte diverse, e questa è l'unica cosa che ha funzionato per eliminare le code senza uccidere tutte le mie altre impostazioni. Grazie! Non posso credere che rabbitmqctl non abbia solo un comando "elimina tutte le code".
sudo,

A proposito, per ottenere rabbitmqadmin, devi andare http://yourhost:15672/cli/e scaricarlo.
sudo,

1

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.


comprese le code durature? Io non la penso così. Qualificherò la tua risposta.
Hendy Irawan,

No, le code permanenti non possono essere eliminate arrestando il server. Possono essere eliminati dall'interfaccia Web di gestione RabbitMQ nelle code.
ErAcube,

In realtà sì, questo mi ha aiutato e tutte le circa 4500 code generate automaticamente sono sparite. Sembra che questi fossero quelli non durevoli. Grazie!
Rolice,

1

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

  1. Sfoglia http://{hostname}:15672/cli/rabbitmqadminper scaricare.
  2. Vai alla cartella contenente, quindi esegui cmd con privilegio di amministratore

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'

0

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.


0

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 --versionsquanto 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

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-usersmailing list e solo a volte risponde alle domande su StackOverflow.


0

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.


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

1
Ricevo questo quando lo eseguo: testa: conteggio di riga illegale - -1
Robert Ross,

"Head -n-1" dovrebbe essere "head -1" o "head -n 1"
Gerd Busker,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.