Удаление очередей в RabbitMQ
У меня есть несколько очередей, работающих с RabbitMQ. Некоторые из них сейчас бесполезны, как я могу их удалить? К сожалению, я не установил .
если я установлю его сейчас, он будет удален?
есть ли способ удалить эти очереди сейчас?
13 ответов:
Если вы не заботитесь о других очередях, вы можете удалить их все с помощью командной строки, выполнив следующие команды по порядку:
предупреждение: это будет удалить любой пользователи и vhosts вы настроили на вашем сервере кролика
rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app
в документации rabbitmq говорится, что :
удаляет узел из любого кластера, к которому он принадлежит, удаляет все данные от база данных управления, например настроенные пользователи и vhosts, и удаляет все постоянные сообщения.
Так что, будьте осторожны, используя его.
в версиях RabbitMQ > 3.0 можно также использовать HTTP API, если включен плагин rabbitmq_management. Просто не забудьте установить content-type в "application / json" и указать имя vhost и очереди:
т. е. использование 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
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
здесь rabbitmqadmin что приятно работать с консоли.
если вы ssh / входите на сервер, где установлен rabbit, вы можете скачать его с:
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* * и есть голый minumum
hostname = localhost port = 15672 username = {user} password = {password}
EDIT: начиная с комментария от @user299709, может быть полезно указать, что пользователь должен быть помечен как "администратор" в rabbit. (https://www.rabbitmq.com/management.html)
вы утверждаете, что очередь существует (и создать его, если это не так) с помощью очереди.объявить. Если изначально для параметра автоматическое удаление было задано значение false, вызывающая очередь.повторное объявление с autodelete true приведет к мягкой ошибке, и брокер закроет канал.
вы должны использовать очереди.удалить теперь, чтобы удалить его.
дополнительную информацию см. В документации по API:
Если вы используете другой клиент, вам нужно будет найти эквивалентный метод. Поскольку это часть протокола, он должен быть там, и это, вероятно, часть канала или эквивалента.
вы также можете взглянуть на остальную документацию, в частности на Подключить Интернет-Эквайринг раздел, который охватывает множество распространенных случаев использования.
наконец, если у вас есть вопрос и не можете найти ответ в другом месте, вы должны попробовать разместить на RabbitMQ Обсудить список рассылки. Разработчики делают все возможное, чтобы ответить на все вопросы.
краткое резюме для быстрого удаления очереди со всеми значениями по умолчанию с хоста, на котором работает сервер 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=%
другой вариант-включить management_plugin и подключиться к нему через браузер. Вы можете увидеть все очереди и информацию о них. Можно и просто удалить очереди из этого интерфейса.
Я немного обобщил метод JavaScript/jQuery Петра Стаппа, инкапсулировав его в функцию и немного обобщив.
эта функция использует 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');
пожалуйста, используйте это на свой страх и риск!
плагин управления (web-интерфейс) дает вам ссылку на скрипт Python. Вы можете использовать его для удаления очередей. Я использовал этот шаблон, чтобы удалить много очередей:
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
Я использую этот псевдоним в
.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()
по существу, это итерационная версия кода Шветы Б. Патила.
с установленным плагином 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>/{}
возьмет имя очереди и установит его там, где мы установили{}
символ удаления всех очередей не фильтруется в процессе.убедитесь, что пользователь был использован имеет права администратора.
Я сделал это по-другому, потому что у меня был только доступ к веб-странице управления. Я создал простой "сниппет", который удаляет очереди в 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
установить
$ sudo rabbitmq-plugins enable rabbitmq_management
и перейти к http://localhost:15672/#/queues если вы используете localhost. пароль по умолчанию будет
username: guest
,password: guest
и перейдите на вкладку очереди и удалите очередь.