Odpowiedzi:
Najpierw wypisz kolejki:
rabbitmqadmin list queues name
Następnie z listy musisz ręcznie usunąć je kolejno:
rabbitmqadmin delete queue name='queuename'
Ze względu na format wyjściowy, nie wydaje się, że możesz grep odpowiedź list queues
. Alternatywnie, jeśli szukasz sposobu na wyczyszczenie wszystkiego (przeczytaj: zresetuj wszystkie ustawienia , przywróć instalację do stanu domyślnego), użyj:
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'
coś zrobić .
Dzięki rabbitmqadmin
możesz je usunąć za pomocą tej jednowarstwowej:
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
egrep
, więc moje polecenie będzie wyglądać następująco:rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
Właściwie bardzo łatwe dzięki wtyczce do zarządzania i zasadom:
Goto Management Console (localhost: 15672)
Przejdź do karty administratora
Przejdź do zakładki Zasady (po prawej stronie)
Dodaj zasadę
Wypełnij pola
Zapisać
Spróbuj tego:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
ponieważ wynikiem jest tabela ASCII z kolumną „nazwa”. Poprawiłem polecenie, aby je rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
naprawić.
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Jeśli nie masz zainstalowanego rabbitmqadmin, spróbuj wyczyścić kolejki za pomocą rabbitmqctl:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
ani purge_queue
poleceń rabbitmqctl
. Chciałbym wyczyścić wiele kolejek, które wydają się być generowane automatycznie i nie chciałbym instalować dodatkowego oprogramowania, takiego jak rabbitmqadmin
...
rabbitmqctl purge_queue
pracował tu ręcznie. Musiałem tylko dodać -p <wirtualny host>
delete_queue
i purge_queue
są dostępne rabbitmqctl
, a ja po prostu uruchomić je pomyślnie. Być może korzystasz ze starej wersji.
Jeśli próbujesz usunąć kolejki, ponieważ są nieużywane i nie chcesz resetować, jedną z opcji jest ustawienie bardzo niskiego poziomu TTL w kolejce za pomocą zasad, poczekaj, aż kolejki zostaną automatycznie usunięte po przekroczeniu TTL a następnie usuń zasady ( https://www.rabbitmq.com/ttl.html ).
rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues
Aby usunąć zasadę
rabbitmqctl clear_policy delq
Pamiętaj, że działa to tylko w przypadku nieużywanych kolejek
Oryginalne informacje tutaj: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
Zrobiłem deleteRabbitMqQs.sh, który akceptuje argumenty do przeszukania listy kolejek, wybierając tylko te pasujące do żądanego wzorca. Jeśli nie podasz żadnych argumentów, usunie je wszystkie! Pokazuje listę kolejek, które ma zamiar usunąć, pozwalając ci wyjść zanim zrobisz coś destrukcyjnego.
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"
Jeśli chcesz inaczej dopasowywać argumenty, które przekazujesz, możesz zmienić grep w czwartym wierszu. Usuwając wszystkie kolejki, nie usunie tych z trzema kolejnymi spacjami, ponieważ doszedłem do wniosku, że ewentualność byłaby rzadsza niż ludzie, którzy wyświetlają wyniki w różnych językach przez program rabbitmqctl.
Cieszyć się!
W wersji Rabbit 3.7.10 możesz uruchomić poniżej polecenia z uprawnieniami roota:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
Oto sposób, aby to zrobić za pomocą PowerShell. adres URL może wymagać aktualizacji
$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)
}
Możesz użyć evolmaxmql jak poniżej:
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 ].'
Powyższe spowoduje usunięcie wszystkich pustych kolejek na wszystkich hostach vhost, których nazwa zaczyna się od „prefix-”. Możesz edytować zmienne IfUnused, IfEmpty i MatchRegex zgodnie z wymaganiami.
rabbitmqadmin
nie jest dostępny.
Jeśli chcesz tylko wyczyścić kolejki, które nie są puste (znacznie szybciej):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Dla mnie czyszczenie kolejki (zarówno pustej, jak i niepustej) zajmuje 2-3 sekundy, więc iteracja po 50 kolejkach to taki ból, a ja po prostu muszę wyczyścić 10 z nich (40/50 są puste).
Próbowałem polecenia rabbitmqctl i resetowania, ale są one bardzo wolne.
Jest to najszybszy sposób, jaki znalazłem (zastąp swoją nazwę użytkownika i hasło):
#!/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/@
Uwaga: Działa to tylko z domyślnym vhost /
Aby wyświetlić kolejki,
./rabbitmqadmin -f tsv -q list queues
Aby usunąć kolejkę,
./rabbitmqadmin delete queue name=name_of_queue
Oto szybsza wersja (korzystająca z parallel
instalacji sudo apt-get install równolegle) rozwijająca się na doskonałej odpowiedzi autorstwa @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)
To polecenie usuwa wszystkie twoje kolejki
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={}
Ten skrypt jest bardzo prosty, ponieważ używa -f bash
, który wyświetla kolejki jako listę.
Następnie używamy xargs -n1
do podzielenia tego na wiele zmiennych
Następnie użyjemy polecenia xargs -I{}
, które uruchomi polecenie i zastąpi {}
polecenie.
http://yourhost:15672/cli/
pobrać i pobrać.
Nie musisz resetować serwera rabbitmq, aby usunąć nietrwałe kolejki. Po prostu zatrzymaj serwer i uruchom ponownie, a usunie wszystkie dostępne niestabilne kolejki.
Dla których masz problem z instalacją rabbitmqadmin, powinieneś najpierw zainstalować Pythona.
Użytkownicy systemu operacyjnego podobnego do UNIX-a muszą skopiować rabbitmqadmin do katalogu w PATH, np. / Usr / local / bin.
Użytkownicy systemu Windows będą musieli upewnić się, że Python znajduje się na ich ŚCIEŻCE i wywołać rabbitmqadmin jako python.exe rabbitmqadmin.
Następnie
http://{hostname}:15672/cli/rabbitmqadmin
aby pobrać.Aby wyświetlić kolejki
python rabbitmqadmin list queues
.
Aby usunąć kolejkę
python rabbitmqadmin delete queue name=Name_of_queue
Aby usunąć wszystkie kolejki
1- Deklaracja zasad
python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues
2- Usuń politykę
python rabbitmqadmin delete policy name='expire_all_policies'
Istnieje sposób na usunięcie wszystkich kolejek i wymian bez skryptów i pełnego resetowania. Możesz po prostu usunąć i ponownie utworzyć wirtualnego hosta z interfejsu administratora. Działa to nawet dla vhosta /
.
Jedyne, co musisz przywrócić, to uprawnienia do nowo utworzonego vhosta.
OK, ważny kwalifikator dla tej odpowiedzi: Pytanie wymaga użycia albo rabbitmqctl LUB rabbitmqadmin, aby rozwiązać ten problem, moja odpowiedź wymagała użycia obu. Należy również pamiętać, że zostało to przetestowane w systemie MacOS 10.12.6 i wersjach programów rabbitmqctl i rabbitmqadmin, które są instalowane podczas instalowania programu rabbitmq z Homebrew i które są identyfikowane brew list --versions
jako królikmq 3.7.0
rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
Inną opcją jest usunięcie vhosta związanego z kolejkami. Spowoduje to usunięcie wszystkiego związanego z vhostem, więc ostrzegaj, ale jest to łatwe i szybkie.
UWAGA: zespół RabbitMQ monitoruje na rabbitmq-users
listę mailingową i tylko czasami odpowiada na pytania na StackOverflow.
Próbowałem powyższych fragmentów kodu, ale nie przesyłałem strumieniowo.
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
.
Generuję plik, który zawiera wszystkie nazwy kolejek i pętle przez linię do linii, aby je usunąć. W przypadku pętli while read ...
nie zrobiłem tego dla mnie. Zawsze zatrzymywało się przy pierwszej nazwie kolejki.
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