Ma motivation était que je voulais "peep" le contenu de la file d'attente afin d'afficher l'état actuel de la file d'attente sur le service.
Obtenu via l'API Web pour vérifier le contenu de la file d'attente de Rabbit MQ, un courtier AMQP. C'est tout ce que vous pouvez obtenir avec pika.basic_consume () ou pika.consume (), mais utilisez l'API de gestion pour éviter d'affecter d'autres consommateurs.
Si vous regardez la [documentation de l'API HTTP] de RabbitMQ (https://cdn.rawgit.com/rabbitmq/rabbitmq-management/rabbitmq_v3_6_0/priv/www/api/index.html), vous pouvez voir que l'élément get
Please note that the get path in the HTTP API is intended for diagnostics etc - it does not implement reliable delivery and so should be treated as a sysadmin's tool rather than a general API for messaging.
C'est peut-être un peu subtil parce qu'il dit
L'opération a été confirmée ci-dessous.
Le plugin de gestion RabbitMQ doit être activé.
sudo rabbitmq-plugins enable rabbitmq_management
Envoyez un message à la file d'attente pour confirmation.
publish.py
#!/usr/bin/env python
import pika
conn = pika.BlockingConnection(pika.ConnectionParameters())
ch = conn.channel()
ch.queue_declare(queue="hello")
ch.basic_publish(exchange="", routing_key="hello", body="Message 1")
ch.basic_publish(exchange="", routing_key="hello", body="Message 2")
conn.close()
Obtenez-le simplement en utilisant httplib.
view_messages.py
from base64 import b64encode
import httplib, json
API_HOST = "localhost" #Nom d'hôte de destination de la connexion
API_PORT = 15672 #Port de connexion
def view_messages(vhost, queue, count=1):
#Assemblage de l'URI etc.
uri = "/queues/%(vhost)s/%(queue)s/get" % {"vhost": vhost, "queue": queue}
auth = "guest:guest"
headers = {
"Authorization" : "Basic %s" % b64encode(auth),
"Content-Type" : "application/json",
}
opt = {"count": count, "requeue": "true", "payload_file": None, "encoding": "auto"}
#Connectez-vous à Rabbit MQ Management pour recevoir des messages
conn = httplib.HTTPConnection(API_HOST, API_PORT)
body = json.dumps(opt)
conn.request("POST", "/api%s" % uri, body, headers)
response = conn.getresponse()
return json.loads(response.read())
if __name__ == "__main__":
msgs = view_messages("%2F", "hello", count=100)
for msg in msgs:
print msg["payload"]
Je vais essayer.
./publish.py
./view_messages.py
Message 1
Message 2
Recommended Posts