Usunąć wszystkie kolejki z RabbitMQ?

Zainstalowałem rabbitmqadmin i mogłem wyświetlić listę wszystkich wymian i kolejek. Jak mogę użyć rabbitmqadmin lub rabbitmqctl, aby usunąć wszystkie kolejki.

Author: wonea, 2012-07-12

18 answers

Najpierw Wymień swoje kolejki:

rabbitmqadmin list queues name

Następnie z listy musisz ręcznie usunąć je jeden po drugim:

rabbitmqadmin delete queue name='queuename'

Ze względu na format wyjściowy, nie pojawia się odpowiedź grep z list queues. Alternatywnie, jeśli szukasz sposobu na wyczyszczenie wszystkiego (Czytaj: Zresetuj wszystkie ustawienia, przywracając instalację do stanu domyślnego), użyj:

rabbitmqctl stop_app
rabbitmqctl reset    # Be sure you really want to do this!
rabbitmqctl start_app
 237
Author: lukiffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-04 17:27:55

Z rabbitmqadmin możesz je usunąć za pomocą tej jednej linijki:

rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
 39
Author: admenva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-02 22:29:08

Spróbuj tego:

 rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
 19
Author: Gathole,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-18 11:13:33

I made a deleteRabbitMqQs.sh, który akceptuje argumenty do przeszukiwania listy kolejek, wybierając tylko te pasujące do pożądanego wzorca. Jeśli nie podasz żadnych argumentów, usunie je wszystkie! Pokazuje listę kolejek do usunięcia, pozwalając zamknąć przed zrobieniem czegoś 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 dopasować argumenty, które podajesz, możesz zmienić grep w czwartej linii. Przy usuwaniu wszystkich kolejek nie usunie tych z trzema kolejnymi spacje w nich, bo pomyślałem, że ewentualność będzie rzadsza niż ludzie, którzy mają rabbitmqctl drukowanie jego wyjście w różnych językach.

Smacznego!
 6
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-13 13:18:59

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

 6
Author: Anatoly Rugalev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-27 11:46:32

Oto sposób, aby to zrobić z 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)
 }
 5
Author: klumsy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-20 02:23:36

Jeśli próbujesz usunąć kolejki, ponieważ są nieużywane i nie chcesz ich zresetować, jedną z opcji jest ustawienie kolejki TTL na bardzo niskim poziomie za pomocą zasady, poczekaj, aż kolejki zostaną automatycznie usunięte po przejściu TTL, a następnie usuń zasadę ( https://www.rabbitmq.com/ttl.html).

rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues

Aby usunąć politykę

rabbitmqctl clear_policy delq

Zauważ, że to działa tylko dla nieużywanych kolejek

Oryginalne info tutaj: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html

 5
Author: user783836,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 13:52:40

Możesz użyć rabbitmqctl eval 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 we wszystkich vhostach, które mają nazwę rozpoczynający się od " prefix -". Możesz edytować zmienne IfUnused, IfEmpty, i MatchRegex zgodnie z Twoimi wymaganiami.

 3
Author: George Ninan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-19 10:59:18

Usuwanie wszystkich kolejek za pomocą jednego linera rabbitmqctl

rabbitmqctl list_queues | awk '{ print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
 3
Author: Marian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-31 05:00:57

Oto szybsza wersja (używając parallel install sudo apt-get install parallel) rozwijająca się na doskonałej odpowiedzi @ 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
Author: alonisser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-15 15:45:00

To polecenie usuwa wszystkie 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, aby podzielić to na wiele zmiennych

Następnie używamy xargs -I{}, który uruchomi następujące polecenie i zastąpi {} w poleceniu.

 1
Author: Kevin Simper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-18 09:26:47

Nie musisz resetować serwera rabbitmq aby usunąć nietrwałe kolejki. Po prostu zatrzymaj serwer i uruchom ponownie, a usunie on wszystkie dostępne kolejki nietrwałe.

 1
Author: ErAcube,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-26 08:38:53

W rzeczywistości bardzo łatwe z wtyczki zarządzania i Polityki:

  • Goto Management Console (localhost:15672)

  • Goto Admin tab

  • Goto Polityka tab (po prawej stronie)

  • Add Policy

  • Wypełnij Pola

    • Virtual Host: Select
    • Name: Expire All Polisy (Delete Later)
    • Wzór: .*
    • Zastosuj do: kolejki
    • Definicja: wygasa z wartością 1
  • Zapisz

  • Checkout kolejki tab again
  • Wszystkie kolejki muszą zostać usunięte
  • i nie zapomnij usunąć zasady!!!!!!.
 1
Author: Mesut A.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-24 10:07:26

Istnieje sposób na usunięcie wszystkich kolejek i wymian bez skryptów i pełnego resetu. Możesz po prostu usunąć i ponownie utworzyć wirtualny host z interfejsu administratora. To zadziała nawet dla vhost /.

Jedyne, co musisz przywrócić, to uprawnienia dla nowo utworzonego vhost.

 0
Author: starteleport,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-11 09:47:53

Dobra, ważny kwalifikator dla tej odpowiedzi: Pytanie prosi o użycie rabbitmqctllub rabbitmqadmin aby rozwiązać ten problem, moja odpowiedź musiała użyć obu. Należy również pamiętać, że zostało to przetestowane na MacOS 10.12.6 i wersjach rabbitmqctl i rabbitmqadmin, które są zainstalowane podczas instalacji rabbitmq z Homebrew i które jest identyfikowane z brew list --versions jako 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
Author: Brett Tofel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-12 18:40:53

W przypadku, gdy chcesz tylko wyczyścić kolejki, które nie są puste (o wiele szybciej):

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

Dla mnie oczyszczenie kolejki (zarówno pustej, jak i niepustej) zajmuje 2-3 sekundy, więc przechodzenie przez 50 kolejek jest takim bólem, podczas gdy ja po prostu muszę oczyścić 10 z nich (40/50 jest pustych).

 0
Author: Duc Tran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 15:21:40

Próbowałem rabbitmqctl i reset poleceń, ale są one bardzo powolne.

To najszybszy sposób, jaki znalazłem (zamień 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: To działa tylko z domyślnym vhost /

 0
Author: Aalex Gabi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-25 14:50:44
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname
 -1
Author: Salami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-20 11:22:09