Удаление очередей в RabbitMQ - PullRequest
84 голосов
/ 19 июля 2011

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

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

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

Ответы [ 14 ]

113 голосов
/ 15 октября 2012

Если вам не нужны другие очереди, вы можете удалить их все из командной строки, выполнив следующие команды в следующем порядке:

Предупреждение: это также удалит любой пользователи и vhosts , настроенные на сервере кролика

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

В документации rabbitmq сказано, что команда reset:

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

Так что будьте осторожны при использованииэто.

27 голосов
/ 11 ноября 2013
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
25 голосов
/ 17 апреля 2013

В версиях RabbitMQ> 3.0 вы также можете использовать HTTP API, если подключаемый модуль rabbitmq_management включен.Просто убедитесь, что для content-type установлено значение 'application / json' и укажите vhost и имя очереди:

IE Использование 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
21 голосов
/ 17 апреля 2015

Существует rabbitmqadmin , с которым приятно работать с консоли.

Если вы входите в систему через ssh / log-сервер, на котором установлен кролик, вы можете загрузить его с:*

и сохраните его в / 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}

РЕДАКТИРОВАТЬ: На комментарий @ user299709, может быть полезно указать, что пользователь должен быть помечен как «администратор» в кролика.(https://www.rabbitmq.com/management.html)

14 голосов
/ 14 декабря 2015

Краткая сводка для быстрого удаления очереди со всеми значениями по умолчанию с хоста, на котором работает сервер 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=%
14 голосов
/ 19 июля 2011

Вы утверждаете, что очередь существует (и создаете ее, если она не существует), используя queue.declare . Если вы изначально установили для auto-delete значение false, повторный вызов queue.declare с автоматическим удалением true приведет к мягкой ошибке и брокер закроет канал.

Вам необходимо использовать queue.delete сейчас, чтобы удалить его.

Подробнее см. В документации API:

Если вы используете другой клиент, вам нужно найти эквивалентный метод. Поскольку он является частью протокола, он должен быть там, и, вероятно, он является частью Channel или его эквивалента.

Возможно, вы также захотите ознакомиться с остальной документацией, в частности с разделом Начало работы , который охватывает множество распространенных случаев использования.

Наконец, если у вас есть вопрос и вы не можете найти ответ где-либо еще, попробуйте опубликовать в RabbitMQ Discuss список рассылки. Разработчики делают все возможное, чтобы ответить на все вопросы, задаваемые там.

10 голосов
/ 02 мая 2012

Другой вариант - включить параметр management_plugin и подключиться к нему через браузер. Вы можете увидеть все очереди и информацию о них. Можно и просто удалить очереди из этого интерфейса.

9 голосов
/ 14 января 2016

Я немного обобщил метод 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');

Удалите все очереди в vhost 'dev', начиная с 'foo'

deleteQueues('dev', 'foo');

Пожалуйста, используйте это на свой страх и риск!

6 голосов
/ 21 марта 2013

Плагин управления (веб-интерфейс) дает вам ссылку на скрипт 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
5 голосов
/ 22 марта 2014

Я использую этот псевдоним в .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Б. Патил.

...