Подтвердить что ты не робот

Как я могу перечислить или обнаружить очереди на RabbitMQ-обмене с помощью python?

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

4b9b3361

Ответ 1

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

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

Ответ 2

Кажется, нет прямого 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 для вашего собственного использования.

Ответ 3

Вы можете добавить плагин 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

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

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

from pyrabbit.api import Client
cl = Client('localhost:15672', 'guest', 'guest')
queues = [q['name'] for q in cl.get_queues()]

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

http://localhost:15672/cli/

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