AMQP ist ein Protokoll für Messaging-Dienste. Jemand schiebt eine Nachricht in die Warteschlange und jemand ruft die Nachricht aus der Warteschlange ab. Ich verstehe das.
Die folgende Seite ist für Details sehr hilfreich. Seite des GREE-Ingenieurs Leicht zu lesen und sehr schön.
Die Qualität ist jedoch unverständlich, ohne sie zu bewegen, also habe ich experimentiert. Die für das Experiment verwendeten Werkzeuge sind wie folgt
Das Umgebungskonstruktionsverfahren wird später beschrieben.
Der Bildschirm stammt aus dem Management Plugin von Rabbit MQ.
Laut der Seite des GREE-Ingenieurs empfängt "Exchange" "Nachricht" und "Exchange" leitet sie an "Warteschlange" weiter.
Vorerst habe ich beschlossen, es aus "Exchange" zu machen, und hier ist, was ich aus dem [Beispielcode] von "kombu" (http://kombu.readthedocs.org/en/latest/reference/kombu.html#exchange) sehen konnte.
from kombu import Connection,Exchange
exchange = Exchange('foo_exc', type='direct')
with Connection('amqp://guest:guest@localhost:5672//') as c:
bound = exchange(c.default_channel)
bound.declare()
Exchange
ist abgeschlossen. Unten wird "foo_exc" durch den obigen Prozess erstellt.
Erstellen Sie weiterhin eine Warteschlange basierend auf Beispielcode.
from kombu import Connection,Exchange,Queue
exchange = Exchange('foo_exc', type='direct')
queue = Queue('bar_queue', exchange=exchange, routing_key='hoge.fuga')
with Connection('amqp://guest:guest@localhost:5672//') as c:
bound = queue(c.default_channel)
bound.declare()
Warteschlange wird erstellt.
Erstellen Sie schließlich eine "Nachricht" und tauchen Sie in die "Börse" ein. Siehe Referenz anstelle von Beispielcode.
from kombu import Connection,Exchange
exchange = Exchange('foo_exc', type='direct')
with Connection('amqp://guest:guest@localhost:5672//') as c:
bound_exc = exchange(c.default_channel)
msg = bound_exc.Message("Hello, World")
bound_exc.publish(msg, routing_key='hoge.fuga')
Es scheint, dass "Hallo Welt" richtig enthalten ist. Rund Nachrichten abrufen.
Die "Nachricht", die nicht genommen werden kann, ist nur Müll, also nimm sie. Beispielcode
from kombu import Connection,Exchange,Queue,Consumer
exchange = Exchange('foo_exc', type='direct')
queue = Queue('bar_queue', exchange=exchange, routing_key='hoge.fuga')
def callback(body, message):
print body
message.ack()
with Connection('amqp://guest:guest@localhost:5672//') as c:
with Consumer(c.default_channel, queues=[queue], callbacks=[callback]):
c.drain_events()
Ergebnis
ubuntu@ubuntu:~$ python consume.py
Hello, World
"Hallo Welt" wird angezeigt.
Wenn Sie nicht "message.ack ()" aufrufen, verschwindet die Nachricht nicht aus "Queue".
RabbitMQ
Erstellt mit Docker + Docker-Compose
docker-compose.yml
rabbit:
image: rabbitmq:3-management
hostname: rabbit001
ports:
- "15672:15672"
- "5672:5672"
kombu
Normalerweise mit Pip installieren
pip install kombu
Recommended Posts