Відповіді:
Спочатку перерахуйте свої черги:
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'
чи щось.
З 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
Насправді дуже просто з плагіном управління та політикою:
Консоль управління Goto (localhost: 15672)
Перейти Адміністратор вкладку
Goto політики Вкладка (на правій стороні)
Додати політику
Заповнення полів
Зберегти
Спробуйте це:
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
і я просто їх успішно запускаю. Можливо, ви на старій версії.
Якщо ви намагаєтесь видалити черги, оскільки вони не використовуються, і ви не хочете скинути їх, одним із варіантів є встановлення черги 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"
Якщо ви хочете відрізняти відповідність аргументам, які ви передаєте, ви можете змінити греп у четвертому рядку. Видаляючи всі черги, вони не видалять їх з трьома послідовними пробілами в них, тому що я вважав, що випадковість буде рідше, ніж люди, у яких rabbitmqctl друкує її вихід на різних мовах.
Насолоджуйтесь!
У кролі версії 3.7.10 ви можете запустити команду нижче з дозволом root:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_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)
}
Ви можете використовувати 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 відповідно до ваших вимог.
rabbitmqadmin
недоступний.
Якщо ви хочете лише очистити черги, які не порожні (набагато швидше):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Для мене потрібно чистити 2-3 секунди, щоб очистити чергу (як порожню, так і не порожню), тому повторення через 50 черг - це такий біль, тоді як мені просто потрібно очистити 10 з них (40/50 порожні).
Я спробував 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 -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
встановити 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 /
.
Єдине, що вам потрібно буде відновити - це дозволи для новоствореного 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, пов’язаний з чергами. Це видалить усе, що пов’язане з 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