Удаление очередей в RabbitMQ
У меня есть несколько очередей, работающих с RabbitMQ. Некоторые из них сейчас бесполезны, как я могу их удалить? К сожалению, я не установил параметр auto_delete
.
Если я установил его сейчас, будет ли он удален?
Есть ли способ удалить эти очереди сейчас?
Ответы
Ответ 1
Если вам не нужны другие очереди, вы можете удалить их из командной строки, выполнив следующие команды:
Предупреждение: это также будет удалять всех пользователей и vhosts, которые вы настроили на своем кроличье сервере p >
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
В документации rabbitmq указано, что команда reset
:
Удаляет node из любого кластера, к которому он принадлежит, удаляет все данные из базы данных управления, такие как настроенные пользователи и vhosts, и удаляет все постоянные сообщения.
Итак, будьте осторожны с этим.
Ответ 2
В версиях RabbitMQ > 3.0 вы также можете использовать HTTP API, если включен плагин rabbitmq_management. Просто не забудьте установить тип содержимого в "application/json" и указать имя vhost и queue:
т.е. Использование curl с vhost 'test' и имя очереди 'testqueue':
$ curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/test/testqueue
HTTP/1.1 204 No Content
Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue)
Date: Tue, 16 Apr 2013 10:37:48 GMT
Content-Type: application/json
Content-Length: 0
Ответ 3
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel = connection.channel()
channel.queue_delete(queue='queue-name')
connection.close()
Установите пакет pika следующим образом
$ sudo pip install pika==0.9.8
Установка зависит от пакетов pip и git -core, вам может потребоваться их установка в первую очередь.
В Ubuntu:
$ sudo apt-get install python-pip git-core
В Debian:
$ sudo apt-get install python-setuptools git-core
$ sudo easy_install pip
В Windows: для установки easy_install запустите установщик MS Windows для setuptools
> easy_install pip
> pip install pika==0.9.8
Ответ 4
Существует rabbitmqadmin, с которым удобно работать с консоли.
Если вы ssh/войдите на сервер, на котором установлен кролик, вы можете скачать его из:
http://{server}:15672/cli/rabbitmqadmin
и сохраните его в /usr/local/bin/rabbitmqadmin
Затем вы можете запустить
rabbitmqadmin -u {user} -p {password} -V {vhost} delete queue name={name}
Обычно это требует sudo.
Если вы хотите избежать ввода имени пользователя и пароля, вы можете использовать config
rabbitmqadmin -c /var/lib/rabbitmq/.rabbitmqadmin.conf -V {vhost} delete queue name={name}
Все, что в предположении, что у вас есть файл **/var/lib/rabbitmq/.rabbitmqadmin.conf** и есть голая минута
hostname = localhost
port = 15672
username = {user}
password = {password}
EDIT: с комментариями от @user299709, может быть полезно указать, что пользователь должен быть помечен как "администратор" у кролика. (https://www.rabbitmq.com/management.html)
Ответ 5
Вы утверждаете, что существует очередь (и создайте ее, если она отсутствует), используя queue.declare. Если вы первоначально установили auto-delete в false, вызов queue.declare снова с помощью autodelete true приведет к мягкой ошибке, и брокер закроет канал.
Теперь вам нужно использовать queue.delete, чтобы удалить его.
Подробнее см. в документации по API:
Если вы используете другого клиента, вам нужно найти эквивалентный метод. Поскольку это часть протокола, она должна быть там, и это, вероятно, часть канала или эквивалента.
Вы также можете посмотреть остальную часть документации, в частности раздел Geting Started, который охватывает множество распространенных случаев использования.
Наконец, если у вас есть вопрос и вы не можете найти ответ в другом месте, вы должны попробовать опубликовать в списке рассылки RabbitMQ Обсудить. Разработчики прилагают все усилия, чтобы ответить на все вопросы, заданные там.
Ответ 6
Краткий обзор для быстрого удаления очереди со всеми значениями по умолчанию с хоста, на котором запущен сервер RMQ:
curl -O http://localhost:15672/cli/rabbitmqadmin
chmod u+x rabbitmqadmin
./rabbitmqadmin delete queue name=myQueueName
Чтобы удалить все очереди, соответствующие шаблону в данном vhost (например, содержащий "amq.gen" в корневом vhost):
rabbitmqctl -p / list_queues | grep 'amq.gen' | cut -f1 -d$'\t' | xargs -I % ./rabbitmqadmin -V / delete queue name=%
Ответ 7
Другой вариант - включить enable_plugin и подключиться к нему через браузер. Вы можете просмотреть все очереди и информацию о них. Возможно и просто удалить очереди из этого интерфейса.
Ответ 8
Плагин управления (веб-интерфейс) дает вам ссылку на python script. Вы можете использовать его для удаления очередей. Я использовал этот шаблон для удаления множества очередей:
python tmp/rabbitmqadmin --vhost=... --username=... --password=... list queues > tmp/q
vi tmp/q # remove all queues which you want to keep
cut -d' ' -f4 tmp/q| while read q;
do python tmp/rabbitmqadmin --vhost=... --username=... --password=... delete queue name=$q;
done
Ответ 9
Я обобщил метод JavaScript/jQuery Piotr Stapp немного дальше, инкапсулируя его в функцию и немного обобщая.
Эта функция использует HTTP-API RabbitMQ для запроса доступных очередей в заданном vhost
, а затем удаляет их на основе необязательного queuePrefix
:
function deleteQueues(vhost, queuePrefix) {
if (vhost === '/') vhost = '%2F'; // html encode forward slashes
$.ajax({
url: '/api/queues/'+vhost,
success: function(result) {
$.each(result, function(i, queue) {
if (queuePrefix && !queue.name.startsWith(queuePrefix)) return true;
$.ajax({
url: '/api/queues/'+vhost+'/'+queue.name,
type: 'DELETE',
success: function(result) { console.log('deleted '+ queue.name)}
});
});
}
});
};
Как только вы вставляете эту функцию в свою консоль JavaScript браузера, находясь на странице управления RabbitMQ, вы можете использовать ее следующим образом:
Удалить все очереди в '/' vhost
deleteQueues('/');
Удалить все очереди в '/' vhost начиная с 'test'
deleteQueues('/', 'test');
Удалить все очереди в 'dev' vhost начиная с 'foo'
deleteQueues('dev', 'foo');
Пожалуйста, используйте это на свой страх и риск!
Ответ 10
Я использую этот псевдоним в .profile
:
alias qclean="rabbitmqctl list_queues | python ~/bin/qclean.py"
где qclean.py
имеет следующий код:
import sys
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
queues = sys.stdin.readlines()[1:-1]
for x in queues:
q = x.split()[0]
print 'Deleting %s...' %(q)
channel.queue_delete(queue=q)
connection.close()
По существу, это итеративная версия кода Shweta B. Patil.
Ответ 11
С установленным плагином rabbitmq_management вы можете запустить это, чтобы удалить все нежелательные очереди:
rabbitmqctl list_queues -p vhost_name |\
grep -v "fast\|medium\|slow" |\
tr "[:blank:]" " " |\
cut -d " " -f 1 |\
xargs -I {} curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/<vhost_name>/{}
Отпустите команду вниз:
rabbitmqctl list_queues -p vhost_name
отобразит все очереди и сколько задач у них есть.
grep -v "fast\|medium\|slow"
будет фильтровать очереди, которые вы не хотите удалять, допустим, что мы хотим удалить каждую очередь без слов быстрым, средним или медленным.
tr "[:blank:]" " "
будет нормализовать разделитель на rabbitmqctl между именем очереди и количеством задач, которые есть
cut -d " " -f 1
разделит каждую строку пробелом и выберем 1-й столбец (имя очереди)
xargs -I {} curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/<vhost>/{}
подберет имя очереди и установит его там, где мы установим символ {}
, который удалит все очереди, не отфильтрованные в процессе.
Убедитесь, что пользователь пользовался правами администратора.
Ответ 12
Я сделал это по-другому, потому что у меня был доступ к веб-странице управления. Я создал простой "фрагмент", который удаляет очереди в Javascript. Вот он:
function zeroPad(num, places) {
var zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
var queuePrefix = "PREFIX"
for(var i=0; i<255; i++){
var queueid = zeroPad(i, 4);
$.ajax({url: '/api/queues/vhost/'+queuePrefix+queueid, type: 'DELETE', success: function(result) {console.log('deleted '+queuePrefix+queueid)}});
}
Все мои очереди были в формате: PREFIX_0001 - PREFIX_0XXX
Ответ 13
установить
$ sudo rabbitmq-plugins enable rabbitmq_management
и перейдите в http://localhost:15672/#/queues, если вы используете localhost. по умолчанию пароль будет именем пользователя: guest, password: guest
и перейдите на вкладку очередей и удалите очередь.