[PYTHON] Messaging mit AMQP mit kombu

Über AMQP

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.

Machen Sie einen Austausch

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()

exchange0.png

Exchange ist abgeschlossen. Unten wird "foo_exc" durch den obigen Prozess erstellt.

Erstellen Sie eine Warteschlange

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()

queue0.png

Warteschlange wird erstellt.

Machen und werfen Sie eine Nachricht

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')

message0.png

Es scheint, dass "Hallo Welt" richtig enthalten ist. Rund Nachrichten abrufen.

Eine Nachricht entgegennehmen

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".

Umgebung

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

Messaging mit AMQP mit kombu
Bei Verwendung von optparse mit iPython
Versuchen Sie, PythonTex mit Texpad zu verwenden.
Verwenden von Graphviz mit Jupyter Notebook
[S3] CRUD mit S3 unter Verwendung von Python [Python]
Verwenden von Quaternion mit Python ~ numpy-quaternion ~
Versuchen Sie es mit matplotlib mit PyCharm
[Python] Verwenden von OpenCV mit Python (Basic)
Verwenden eines Druckers mit Debian 10
Versuchen Sie es mit Folium mit Anakonda
Verwenden von OpenCV mit Python @Mac
Senden Sie mit Python mit Google Mail
Vervollständigung von Python mit Emacs mit Company-Jedi
Harmonischer Mittelwert von Python (mit SciPy)
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Japanisieren Sie Matplotlib mit Alpine mit Docker
Verwenden von Rstan aus Python mit PypeR
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Verwenden von Sitzungen und Reflexionen mit SQL Alchemy
Verwenden von Japanisch mit Rodeos IPython @ Windows
Hinweise zur Verwendung von rstrip mit Python.
Erstellen Sie eine API mit hug mit mod_wsgi
Verwenden von Chainer mit CentOS7 [Umgebungskonstruktion]
Einfach mit Slack mit Bot #NowPlaying
Versuchen Sie, Pythons networkx mit AtCoder zu verwenden
Verwenden einer Webkamera mit Raspberry Pi
Bei Verwendung von MeCab mit virtualenv python
Vorsichtsmaßnahmen bei Verwendung von sechs mit Python 2.5