18 ответов:
во-первых, перечислите свои очереди:
rabbitmqadmin list queues nameзатем из списка, вам нужно будет вручную удалить их по одному:
rabbitmqadmin delete queue name='queuename'из-за выходного формата, не появляется Вы можете grep ответ от
list queues. Кроме того, если вы просто ищете способ, чтобы очистить все (читать: сбросить все настройки, возвращая установку в состояние по умолчанию), используйте:rabbitmqctl stop_app rabbitmqctl reset # Be sure you really want to do this! rabbitmqctl start_app
С
rabbitmqadminвы можете удалить их с фразой:rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
попробуйте это:
rabbitmqadmin list queues name | awk '{print }' | xargs -I qn rabbitmqadmin delete queue name=qn
Я сделал a 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 печатает свой вывод на разных языках.
наслаждайтесь!
Если у вас не установлен rabbitmqadmin, попробуйте очистить очереди с помощью rabbitmqctl:
rabbitmqctl list_queues | awk '{ print }' | xargs -L1 rabbitmqctl purge_queue
вот способ сделать это с помощью 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) }
Если вы пытаетесь удалить очереди, потому что они не используются, и вы не хотите сбрасывать, один из вариантов-установить 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
вы можете использовать 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, которые имеют имя начиная с префиксом" -". Вы можете редактировать переменные IfUnused, IfEmpty, и MatchRegex согласно вашему требованию.
удаление всех очередей с помощью rabbitmqctl one liner
rabbitmqctl list_queues | awk '{ print }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
вот более быстрая версия (с помощью
parallelinstall 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{}это приведет к запуску следующей команды и замене{}в командной строке.
вам не нужно сбрасывать rabbitmq сервер для удаления недлительного очереди. Просто остановите сервер и начните снова, и он удалит все недлительного очередей доступны.
на самом деле очень легко с плагином управления и политики:
перейти Консоль (localhost: 15672)
перейти Admin tab
перейти политика tab(справа)
добавить политика
Заполнить Поля
- Виртуальный Хост: Выберите
- название: Удалить Все Политики(Удалить Позже)
- шаблон: .*
- применяется для: очереди
- определение:истекает со значением 1
сохранить
- оформить заказ очереди tab снова
- все очереди должны быть удалены
- и не забудьте удалить политика!!!!!!.
есть способ удалить все очереди и обмены без скриптов и полный сброс. Вы можете просто удалить и повторно создать виртуальный хост из интерфейса администратора. Это будет работать даже для vhost
/.единственное, что вам нужно будет восстановить, это разрешения для вновь созданного 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
в случае, если вы хотите только очистить очереди, которые не пусты (намного быстрее):
rabbitmqctl list_queues | awk '!=0 { print }' | 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 list queues|awk 'NR>3{print }'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname
Comments