Удаление очередей в RabbitMQ


У меня есть несколько очередей, работающих с RabbitMQ. Некоторые из них сейчас бесполезны, как я могу их удалить? К сожалению, я не установил .

если я установлю его сейчас, он будет удален?

есть ли способ удалить эти очереди сейчас?

13 81

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 и перейдите на вкладку очереди и удалите очередь.