Я установил rabbitmqadmin
и смог перечислить все биржи и очереди. Как я могу использовать rabbitmqadmin
или rabbitmqctl
удалить все очереди.
Ответы:
Сначала перечислите свои очереди:
rabbitmqadmin list queues name
Затем из списка вам нужно будет вручную удалить их по одному:
rabbitmqadmin delete queue name='queuename'
Из-за формата вывода не отображается, из которого можно получить ответ list queues
. В качестве альтернативы, если вы просто ищете способ очистить все (читайте: сбросить все настройки , вернуть установку в состояние по умолчанию), используйте:
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'
нибудь сделать .
На самом деле очень просто с плагином управления и политиками:
Консоль управления Goto (localhost: 15672)
Перейти на вкладку администратора
Вкладка Goto Policies (справа)
Добавить политику
Заполнить поля
Сохранить
С rabbitmqadmin
вы можете удалить их с этим однострочника:
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
egrep
, поэтому моя команда будет выглядеть так:rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
Попробуй это:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
потому что вывод представляет собой таблицу ASCII со столбцом «имя». Я настроил команду, rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
чтобы исправить это.
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Если у вас не установлен rabbitmqadmin, попробуйте очистить очереди с помощью rabbitmqctl:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
ни purge_queue
команд rabbitmqctl
. Я хотел бы очистить множество очередей, которые, похоже, rabbitmqadmin
rabbitmqctl purge_queue
здесь работал вручную. Мне нужно было только добавить -p <virtual-host>
delete_queue
и purge_queue
доступны, rabbitmqctl
и я только что успешно их запустил. Возможно у вас старая версия.
В версии Rabbit 3.7.10 вы можете выполнить следующую команду с правами root:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
Если вы пытаетесь удалить очереди, потому что они не используются, и вы не хотите сбрасывать, один из вариантов - установить очень низкий TTL очереди с помощью политики, дождитесь автоматического удаления очередей после того, как TTL будет пройден. а затем удалите политику ( https://www.rabbitmq.com/ttl.html ).
rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues
Чтобы удалить политику
rabbitmqctl clear_policy delq
Обратите внимание, что это работает только для неиспользуемых очередей.
Исходная информация здесь: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
Я сделал deleteRabbitMqQs.sh, который принимает аргументы для поиска в списке очередей, выбирая только те, которые соответствуют желаемому шаблону. Если вы не предложите аргументов, он удалит их все! Он показывает вам список очередей, которые собираются удалить, позволяя вам выйти, прежде чем делать что-нибудь разрушительное.
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"
Если вам нужно различное сопоставление переданных вами аргументов, вы можете изменить grep в четвертой строке. При удалении всех очередей он не удаляет очереди с тремя последовательными пробелами в них, потому что я полагал, что это произойдет реже, чем у людей, у которых rabbitmqctl выводит свои данные на разных языках.
Наслаждайтесь!
Вот способ сделать это с помощью PowerShell. возможно, потребуется обновить 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)
}
Вы можете использовать rabbitmqctl eval, как показано ниже:
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 ].'
Вышеупомянутое приведет к удалению всех пустых очередей во всех vhosts, имена которых начинаются с «prefix-». Вы можете редактировать переменные IfUnused, IfEmpty и MatchRegex в соответствии с вашими требованиями.
rabbitmqadmin
подходит, когда недоступен.
Если вы хотите очистить только непустые очереди (намного быстрее):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Для меня очистка очереди (как пустой, так и непустой) занимает 2-3 секунды, поэтому перебор 50 очередей - такая боль, в то время как мне просто нужно очистить 10 из них (40/50 пусты).
Я пробовал команды rabbitmqctl и reset, но они очень медленные.
Это самый быстрый способ, который я нашел (замените имя пользователя и пароль):
#!/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/@
Примечание: это работает только с vhost / по умолчанию.
Чтобы вывести список очередей,
./rabbitmqadmin -f tsv -q list queues
Чтобы удалить очередь,
./rabbitmqadmin delete queue name=name_of_queue
Вот более быстрая версия (с использованием parallel
install sudo apt-get install parallel), расширяющая отличный ответ @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)
Эта команда удаляет все ваши очереди
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={}
Этот сценарий очень прост, потому что он использует -f bash
, который выводит очереди в виде списка.
Затем мы используем, xargs -n1
чтобы разделить это на несколько переменных
Затем мы используем xargs -I{}
это, чтобы запустить следующую команду и заменить ее {}
в команде.
http://yourhost:15672/cli/
и скачать его.
Вам не нужен сброс сервер RabbitMQ удалить недлительную очередь. Просто остановите сервер и запустите снова, и он удалит все доступные недолговечные очереди.
Для тех, у кого есть проблема с установкой rabbitmqadmin, вам следует сначала установить python.
Пользователи UNIX-подобных операционных систем должны скопировать rabbitmqadmin в каталог в PATH, например, / usr / local / bin.
Пользователи Windows должны убедиться, что Python находится в их PATH, и вызвать rabbitmqadmin как python.exe rabbitmqadmin.
затем
http://{hostname}:15672/cli/rabbitmqadmin
для загрузки.Чтобы перечислить очереди
python rabbitmqadmin list queues
.
Чтобы удалить очередь
python rabbitmqadmin delete queue name=Name_of_queue
Чтобы удалить все очереди
1- Объявить политику
python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues
2- Удалить политику
python rabbitmqadmin delete policy name='expire_all_policies'
Есть способ убрать все очереди и обмены без скриптов и полного сброса. Вы можете просто удалить и воссоздать виртуальный хост из интерфейса администратора. Это будет работать даже для vhost /
.
Единственное, что вам нужно будет восстановить, это разрешения для вновь созданного виртуального хоста.
Хорошо, важный квалификатор для этого ответа: вопрос действительно требует использования rabbitmqctl ИЛИ rabbitmqadmin для решения этой проблемы, мой ответ должен был использовать оба. Также обратите внимание, что это было протестировано на MacOS 10.12.6 и версиях rabbitmqctl и rabbitmqadmin , которые устанавливаются при установке rabbitmq с Homebrew и идентифицируются brew list --versions
как 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
Другой вариант - удалить виртуальный хост, связанный с очередями. Это удалит все, что связано с vhost, так что имейте в виду, но это легко и быстро.
ПРИМЕЧАНИЕ: команда RabbitMQ следит за rabbitmq-users
списком рассылки и лишь иногда отвечает на вопросы о StackOverflow.
Я пробовал приведенные выше фрагменты кода, но не выполнял потоковую передачу.
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
.
Я создаю файл, содержащий все имена очередей, и просматриваю его построчно, чтобы удалить их. Для петель, while read ...
у меня не делал. Он всегда останавливался на первом имени очереди.
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