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?
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.
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.
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()]
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.
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é.
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)