Мне нужен клиент python, который может обнаруживать очереди на перезапущенном сервере Exchange RabbitMQ, а затем запускать клиентов для возобновления потребления сообщений из каждой очереди. Как я могу найти очереди из некоторых api/library python, совместимых с RabbitMQ?
Как я могу перечислить или обнаружить очереди на RabbitMQ-обмене с помощью python?
Ответ 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/
для локального использования)