Antworten:
Listen Sie zunächst Ihre Warteschlangen auf:
rabbitmqadmin list queues name
Dann müssen Sie sie einzeln manuell aus der Liste löschen:
rabbitmqadmin delete queue name='queuename'
Wird aufgrund des Ausgabeformats nicht angezeigt, können Sie die Antwort von abrufen list queues
. Wenn Sie nur nach einer Möglichkeit suchen, alles zu löschen (lesen Sie: Alle Einstellungen zurücksetzen , die Installation auf den Standardzustand zurücksetzen ), verwenden Sie alternativ :
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'
oder so.
Mit können rabbitmqadmin
Sie sie mit diesem Einzeiler entfernen:
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
egrep
, sodass mein Befehl folgendermaßen aussieht:rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
Eigentlich super einfach mit Management Plugin und Richtlinien:
Goto Management Console (localhost: 15672)
Gehe zu Admin Registerkarte
Goto Richtlinien Registerkarte (auf der rechten Seite)
Richtlinie hinzufügen
Felder füllen
sparen
Versuche dies:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
weil die Ausgabe eine ASCII-Tabelle mit einer Spalte "Name" ist. Ich habe den Befehl so angepasst, dass rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
er behoben wird.
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Wenn Sie rabbitmqadmin nicht installiert haben, versuchen Sie, Warteschlangen mit rabbitmqctl zu löschen:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
noch purge_queue
Befehle in rabbitmqctl
. Ich möchte viele Warteschlangen rabbitmqadmin
rabbitmqctl purge_queue
arbeitete hier manuell. Ich musste nur -p <virtual-host> hinzufügen
delete_queue
und purge_queue
in verfügbar rabbitmqctl
und ich habe sie gerade erfolgreich ausgeführt. Vielleicht bist du auf einer alten Version.
Ich habe eine deleteRabbitMqQs.sh erstellt, die Argumente zum Durchsuchen der Warteschlangenliste akzeptiert und nur diejenigen auswählt, die dem gewünschten Muster entsprechen. Wenn Sie keine Argumente angeben, werden alle gelöscht! Es zeigt Ihnen die Liste der Warteschlangen, die gelöscht werden sollen, und lässt Sie beenden, bevor Sie etwas Destruktives tun.
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"
Wenn Sie eine andere Übereinstimmung mit den übergebenen Argumenten wünschen, können Sie den grep in Zeile vier ändern. Beim Löschen aller Warteschlangen werden keine mit drei aufeinander folgenden Leerzeichen gelöscht, da ich davon ausgegangen bin, dass Eventualitäten seltener sind als bei Personen, bei denen rabbitmqctl die Ausgabe in verschiedenen Sprachen druckt.
Genießen!
Wenn Sie versuchen, Warteschlangen zu löschen, weil sie nicht verwendet werden und nicht zurückgesetzt werden sollen, können Sie die TTL der Warteschlange über eine Richtlinie sehr niedrig einstellen und warten, bis die Warteschlangen automatisch gelöscht werden, sobald die TTL übergeben wurde und entfernen Sie dann die Richtlinie ( https://www.rabbitmq.com/ttl.html ).
rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues
So entfernen Sie die Richtlinie
rabbitmqctl clear_policy delq
Beachten Sie, dass dies nur für nicht verwendete funktioniert Warteschlangen
Originalinformationen hier: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
In Rabbit Version 3.7.10 können Sie den folgenden Befehl mit Root-Berechtigung ausführen:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
Hier ist eine Möglichkeit, dies mit PowerShell zu tun. Die URL muss möglicherweise aktualisiert werden
$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)
}
Sie können rabbitmqctl eval wie folgt verwenden:
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 ].'
Mit dem obigen Befehl werden alle leeren Warteschlangen in allen vhosts gelöscht, deren Name mit "Präfix-" beginnt. Sie können die Variablen IfUnused, IfEmpty und MatchRegex gemäß Ihren Anforderungen bearbeiten.
rabbitmqadmin
nicht zugänglich ist.
Falls Sie nur die Warteschlangen löschen möchten, die nicht leer sind (viel schneller):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Für mich dauert das Löschen einer Warteschlange (sowohl leere als auch nicht leere) 2-3 Sekunden. Das Durchlaufen von 50 Warteschlangen ist also ein Problem, während ich nur 10 davon löschen muss (40/50 sind leer).
Ich habe rabbitmqctl ausprobiert und Befehle zurückgesetzt, aber sie sind sehr langsam.
Dies ist der schnellste Weg, den ich gefunden habe (ersetzen Sie Ihren Benutzernamen und Ihr Passwort):
#!/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/@
Hinweis: Dies funktioniert nur mit dem Standard-vhost /
Um Warteschlangen aufzulisten,
./rabbitmqadmin -f tsv -q list queues
So löschen Sie eine Warteschlange:
./rabbitmqadmin delete queue name=name_of_queue
Hier ist eine schnellere Version (mit parallel
install sudo apt-get install parallel), die die hervorragende Antwort von @admenva erweitert
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)
Dieser Befehl löscht alle Ihre Warteschlangen
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={}
Dieses Skript ist sehr einfach, da es verwendet -f bash
und die Warteschlangen als Liste ausgibt.
Dann xargs -n1
teilen wir das in mehrere Variablen auf
Dann verwenden wir das xargs -I{}
, um den folgenden Befehl auszuführen und {}
im Befehl zu ersetzen .
http://yourhost:15672/cli/
es herunterladen.
Sie müssen den rabbitmq-Server nicht zurücksetzen, um nicht dauerhafte Warteschlangen zu löschen . Stoppen Sie einfach den Server und starten Sie ihn erneut. Dadurch werden alle nicht dauerhaften Warteschlangen entfernt.
Für diejenigen, die ein Problem mit der Installation von rabbitmqadmin haben, sollten Sie zuerst Python installieren.
Benutzer eines UNIX-ähnlichen Betriebssystems müssen rabbitmqadmin in ein Verzeichnis in PATH kopieren, z. B. / usr / local / bin.
Windows-Benutzer müssen sicherstellen, dass Python in ihrem Pfad angegeben ist, und rabbitmqadmin als python.exe rabbitmqadmin aufrufen.
Dann
http://{hostname}:15672/cli/rabbitmqadmin
Zum Herunterladen .Warteschlangen auflisten
python rabbitmqadmin list queues
.
Warteschlange löschen
python rabbitmqadmin delete queue name=Name_of_queue
Alle Warteschlangen löschen
1- Richtlinie deklarieren
python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues
2- Entfernen Sie die Richtlinie
python rabbitmqadmin delete policy name='expire_all_policies'
Es gibt eine Möglichkeit, alle Warteschlangen und Austausche ohne Skripte und vollständiges Zurücksetzen zu entfernen. Sie können einen virtuellen Host einfach über die Administrationsoberfläche löschen und neu erstellen. Dies funktioniert auch für vhost /
.
Sie müssen lediglich die Berechtigungen für den neu erstellten vhost wiederherstellen.
Okay, wichtiges Qualifikationsmerkmal für diese Antwort: Die Frage verlangt, entweder rabbitmqctl ODER rabbitmqadmin zu verwenden, um dies zu lösen. Meine Antwort musste beide verwenden. Beachten Sie außerdem, dass dies unter MacOS 10.12.6 und den Versionen von rabbitmqctl und rabbitmqadmin getestet wurde , die bei der Installation von rabbitmq mit Homebrew installiert werden und brew list --versions
als rabbitmq 3.7.0 gekennzeichnet sind
rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
Eine andere Möglichkeit besteht darin, den den Warteschlangen zugeordneten vhost zu löschen. Dadurch wird alles gelöscht, was mit dem vhost verbunden ist. Seien Sie also gewarnt, aber es ist einfach und schnell.
HINWEIS: Das RabbitMQ-Team überwacht die rabbitmq-users
Mailingliste und beantwortet nur manchmal Fragen zu StackOverflow.
Ich habe die oben genannten Codeteile ausprobiert, aber kein Streaming durchgeführt.
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
.
Ich generiere eine Datei, die alle Warteschlangennamen enthält und diese zeilenweise durchläuft, um sie zu löschen. Für die Schleifen while read ...
habe ich es nicht getan. Es wurde immer beim ersten Warteschlangennamen angehalten.
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