Как я могу перечислить или обнаружить очереди на обмен RabbitMQ с помощью Python? - PullRequest
35 голосов
/ 26 ноября 2010

Мне нужен клиент Python, который может обнаруживать очереди на перезапущенном сервере RabbitMQ, а затем запускать клиенты для возобновления использования сообщений из каждой очереди. Как я могу обнаружить очереди из какой-либо библиотеки / интерфейса Python, совместимой с RabbitMQ?

Ответы [ 7 ]

42 голосов
/ 17 ноября 2011

Кажется, что нет прямого AMQP-способа управления сервером, но есть способ, которым вы можете сделать это из Python.Я бы порекомендовал использовать модуль подпроцесс в сочетании с командой rabbitmqctl для проверки состояния очередей.

Я предполагаю, что вы работаете в Linux.Из командной строки:

rabbitmqctl list_queues

приведет к:

Listing queues ...
pings   0
receptions      0
shoveled        0
test1   55199
...done.

(ну, в моем случае это произошло из-за моих конкретных очередей)

ваш код, используйте этот код, чтобы получить вывод rabbitmqctl:

import subprocess

proc = subprocess.Popen("/usr/sbin/rabbitmqctl list_queues", shell=True, stdout=subprocess.PIPE)
stdout_value = proc.communicate()[0]
print stdout_value

Затем просто придумайте свой собственный код, чтобы проанализировать stdout_value для собственного использования.

24 голосов
/ 26 ноября 2010

Насколько я знаю, нет никакого способа сделать это. Это не имеет ничего общего с Python, но потому что AMQP не определяет какой-либо метод обнаружения очереди.

В любом случае в AMQP клиенты (потребители) объявляют очереди: издатели публикуют сообщения для обмена с ключом маршрутизации, а потребители определяют, в какие очереди направляются эти ключи маршрутизации. Поэтому не имеет смысла говорить об очередях при отсутствии потребителей.

17 голосов
/ 22 января 2014

Вы можете добавить плагин rabbitmq_management

sudo /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
sudo service rabbitmq-server restart

Тогда используйте rest-api

import requests

def rest_queue_list(user='guest', password='guest', host='localhost', port=15672, virtual_host=None):
    url = 'http://%s:%s/api/queues/%s' % (host, port, virtual_host or '')
    response = requests.get(url, auth=(user, password))
    queues = [q['name'] for q in response.json()]
    return queues

Я использую запросы библиотеки в этом примере, но это не существенно.

Также я нашел библиотеку, которая делает это для нас - pyrabbit

from pyrabbit.api import Client
cl = Client('localhost:15672', 'guest', 'guest')
queues = [q['name'] for q in cl.get_queues()]
3 голосов
/ 06 декабря 2010

Так как я новичок в RabbitMQ, возьмите это с собой, но есть интересный Плагин управления , который предоставляет HTTP-интерфейс для «Здесь вы можете управлять обменами»., очереди, привязки, виртуальные хосты, пользователи и разрешения. Надеюсь, пользовательский интерфейс достаточно понятен. "

http://www.rabbitmq.com/blog/2010/09/07/management-plugin-preview-release/

2 голосов
/ 09 ноября 2012

Я использую https://github.com/bkjones/pyrabbit. Он напрямую связан с интерфейсом API плагина RabbitMQ mgmt и очень удобен для опроса RabbitMQ.

2 голосов
/ 27 ноября 2010

Функции управления должны появиться в будущей версии AMQP. Так что сейчас вам придется ждать новой версии, которая будет поставляться с этой функциональностью.

0 голосов
/ 30 мая 2013

пирабит не работал для меня так хорошо;Однако сам плагин управления имеет собственный сценарий командной строки, который можно загрузить из собственного графического интерфейса администратора и использовать позже (например, я загрузил мой из

http://localhost:15672/cli/

для локального использования)

...