Я установил rabbitmqadmin
и смог перечислить все обмены и очереди. Как использовать rabbitmqadmin
или rabbitmqctl
для удаления всех очередей.
Удалить все очереди из RabbitMQ?
Ответ 1
Сначала укажите свои очереди:
rabbitmqadmin list queues name
Затем из списка вам нужно вручную удалить их по одному:
rabbitmqadmin delete queue name='queuename'
Из-за формата вывода, не появляется, вы можете grep ответ от list queues
. Кроме того, если вы просто ищете способ очистить все (прочитайте: reset все настройки, вернув установку в состояние по умолчанию), используйте:
rabbitmqctl stop_app
rabbitmqctl reset # Be sure you really want to do this!
rabbitmqctl start_app
Ответ 2
С помощью rabbitmqadmin
вы можете удалить их с помощью этого однострочного интерфейса:
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
Ответ 3
Попробуйте следующее:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
Ответ 4
На самом деле очень легко с плагином управления и политиками:
-
Консоль управления Goto (localhost: 15672)
-
Перейти к вкладке Admin
-
Перейдите на вкладку Политики (справа)
-
Добавить политику
-
Заполнить поля
- Виртуальный хост: выберите
- Имя: срок действия всех политик (удалить позже)
- Шаблон:. *
- Применить к: очередям
- Определение: истекает со значением 1 (изменить тип с String на Number)
-
Сохранить
- Снова перейдите на вкладку Очереди
- Все очереди должны быть удалены
- И не забудьте удалить политику !!!!!! ,
Ответ 5
Если у вас нет установленного rabbitmqadmin, попробуйте очистить очереди с помощью rabbitmqctl:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
Ответ 6
Я сделал deleteRabbitMqQs.sh, который принимает аргументы для поиска списка очередей, выбрав только те, которые соответствуют шаблону, который вы хотите. Если вы не предложите никаких аргументов, они удалят их все! Он показывает вам список очередей, которые он собирается удалить, позволяя вам выйти, прежде чем делать что-либо разрушительное.
for word in "[email protected]"
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, выводящий свой вывод на разных языках.
Наслаждайтесь!
Ответ 7
Если вы пытаетесь удалить очереди, потому что они не используются, и вы не хотите сбрасывать, один из вариантов - установить очень низкий 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
Ответ 8
Вот как это сделать с помощью 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)
}
Ответ 9
Вы можете использовать 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 согласно вашему требованию.
Ответ 10
Удаление всех очередей с использованием rabbitmqctl одним вкладышем
rabbitmqctl list_queues | awk '{ print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Ответ 11
В версии 3.7.10 Rabbit вы можете запустить команду ниже с правами root:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
Ответ 12
Если вы хотите очистить только те очереди, которые не пусты (намного быстрее):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Для меня это занимает 2-3 секунды, чтобы очистить очередь (как пустую, так и непустую), поэтому итерация по 50 очередям является такой болью, в то время как мне просто нужно очистить 10 из них (40/50 пусты).
Ответ 13
Чтобы перечислить очереди,
./rabbitmqadmin -f tsv -q list queues
Чтобы удалить очередь,
./rabbitmqadmin delete queue name=name_of_queue
Ответ 14
Вот более быстрая версия (используя parallel
установить 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)
Ответ 15
Эти команды удаляют все ваши очереди
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={}
Этот script является супер простым, потому что он использует -f bash
, который выводит очереди в виде списка.
Затем мы используем xargs -n1
, чтобы разбить это на несколько переменных
Затем мы используем xargs -I{}
, который выполнит следующую команду и заменит {}
в команде.
Ответ 16
Вам не нужно reset сервер rabbitmq удалить ненужные очереди. Просто остановите сервер и запустите его снова, и он удалит все оставшиеся без очереди очереди.
Ответ 17
Я пробовал rabbitmqctl и команды сброса, но они очень медленные.
Это самый быстрый способ, который я нашел (замените ваше имя пользователя и пароль):
#!/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 [email protected] 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 [email protected] curl -XDELETE -sSL -u $USER:$PASSWORD http://localhost:15672/api/exchanges/%2f/@
Примечание: это работает только с vhost/по умолчанию
Ответ 18
Есть способ удалить все очереди и обмены без скриптов и полный reset. Вы можете просто удалить и повторно создать виртуальный хост из интерфейса администратора. Это будет работать даже для vhost /
.
Единственное, что вам нужно восстановить - это разрешения для вновь созданного vhost.
Ответ 19
Хорошо, важная характеристика для этого ответа: в вопросе предлагается использовать 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
Ответ 20
Другой вариант - удалить vhost, связанный с очередями. Это удалит все, что связано с vhost, так что будьте осторожны, но это легко и быстро.
ПРИМЕЧАНИЕ: команда RabbitMQ контролирует список рассылки rabbitmq-users
и только иногда отвечает на вопросы по StackOverflow.
Ответ 21
Я попробовал вышеупомянутые части кода, но я не делал никакой потоковой передачи.
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
Я создаю файл, который содержит все имена очередей и циклически перебирает их, чтобы удалить их. Для циклов, while read...
не сделал это для меня. Он всегда останавливался на первом имени очереди.
Ответ 22
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname