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