web-dev-qa-db-fra.com

Comment puis-je lister ou découvrir des files d'attente sur un échange RabbitMQ en utilisant python?

J'ai besoin d'un client python capable de détecter les files d'attente sur un échange de serveur RabbitMQ redémarré, puis de démarrer un client pour reprendre la consommation de messages de chaque file d'attente. Comment puis-je découvrir des files d'attente à partir de certaines api/librairies python compatibles RabbitMQ? 

33
rschramm

Autant que je sache, il n'y a aucun moyen de le faire. Cela n'a rien à voir avec Python, mais parce qu'AMQP ne définit aucune méthode de découverte de file d'attente.

Dans tous les cas, dans AMQP, ce sont les clients (consommateurs) qui déclarent les files d'attente: les éditeurs publient les messages vers un échange avec une clé de routage et les consommateurs déterminent la file d'attente de ces clés de routage. Il n’a donc aucun sens de parler de files d’attente en l’absence des consommateurs.

22
Daniel Roseman

Il ne semble pas y avoir de moyen AMQP direct pour gérer le serveur, mais vous pouvez le faire à partir de Python. Je recommanderais d'utiliser un sous-processus module associé à la commande rabbitmqctl pour vérifier l'état des files d'attente.

Je suppose que vous utilisez ceci sous Linux. A partir d'une ligne de commande, en cours d'exécution:

rabbitmqctl list_queues

aura pour résultat:

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

(bon, dans mon cas, c'est dû à mes files d'attente spécifiques)

Dans votre code, utilisez ce code pour obtenir le résultat de rabbitmqctl:

import subprocess

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

Ensuite, créez votre propre code pour analyser stdout_value pour votre propre usage.

38
IvanD

Vous pouvez ajouter le plugin rabbitmq_management

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

Puis utilisez 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

J'utilise request library dans cet exemple, mais ce n'est pas significatif.

J'ai aussi trouvé une bibliothèque qui le fait pour nous - pyrabbit

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

J'utilise https://github.com/bkjones/pyrabbit . Il communique directement avec l'interface API du plug-in mgmt du rabbitMQ et est très pratique pour interroger RabbitMQ. 

2
David Lemphers

Les fonctionnalités de gestion doivent figurer dans une future version d’AMQP. Donc, pour l'instant, vous devrez attendre qu'une nouvelle version soit fournie avec cette fonctionnalité.

2
mariana soffer

le pyrabbit n'a pas très bien fonctionné pour moi; Cependant, le plug-in de gestion a son propre script de ligne de commande que vous pouvez télécharger à partir de votre propre interface graphique d'administration et l'utiliser plus tard

http://localhost:15672/cli/

pour utilisation locale)

0
diogobaeder