Meine Motivation war, dass ich den Inhalt der Warteschlange "gucken" wollte, um den aktuellen Status der Warteschlange im Dienst anzuzeigen.
Wird über die Web-API abgerufen, um den Inhalt der Warteschlange von Rabbit MQ, einem AMQP-Broker, zu überprüfen. Das ist alles, was Sie mit pika.basic_consume () oder pika.consume () erreichen können. Verwenden Sie jedoch die Verwaltungs-API, um andere Verbraucher nicht zu beeinträchtigen.
Wenn Sie sich die [HTTP-API-Dokumentation] von RabbitMQ (https://cdn.rawgit.com/rabbitmq/rabbitmq-management/rabbitmq_v3_6_0/priv/www/api/index.html) ansehen, können Sie sehen, dass das Element get ist
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.
Es kann ein wenig subtil sein, weil es sagt
Die Funktionsprüfung wurde unten durchgeführt.
Das RabbitMQ Management Plugin muss aktiviert sein.
sudo rabbitmq-plugins enable rabbitmq_management
Senden Sie eine Nachricht zur Bestätigung an die Warteschlange.
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()
Holen Sie es sich einfach mit httplib.
view_messages.py
from base64 import b64encode
import httplib, json
API_HOST = "localhost" #Hostname des Verbindungsziels
API_PORT = 15672 #Verbindungsport
def view_messages(vhost, queue, count=1):
#Montage von 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"}
#Stellen Sie eine Verbindung zu Rabbit MQ Management her, um Nachrichten zu erhalten
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"]
Ich werde es versuchen.
./publish.py
./view_messages.py
Message 1
Message 2
Recommended Posts