[PYTHON] Messagerie avec AMQP à l'aide de kombu

À propos de l'AMQP

AMQP est un protocole pour les services de messagerie. Quelqu'un envoie un message dans la file d'attente et quelqu'un récupère le message de la file d'attente. Je comprends que.

La page suivante est très utile pour plus de détails. Page de l'ingénieur GREE Facile à lire et très agréable.

Cependant, la qualité est incompréhensible sans la déplacer, alors j'ai expérimenté. Les outils utilisés pour l'expérience sont les suivants

La procédure de construction de l'environnement sera décrite plus loin.

L'écran provient du plugin de gestion de Rabbit MQ.

Faire un échange

Selon la page de l'ingénieur GREE, c'est ʻExchange qui reçoit Message, et ʻExchange le transmet à Queue.

Pour le moment, j'ai décidé de le créer à partir de ʻExchange, et voici ce que je pouvais voir dans [Exemple de code](http://kombu.readthedocs.org/en/latest/reference/kombu.html#exchange) de kombu`.

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

ʻExchangeest terminé. En bas,foo_exc` créé par le processus ci-dessus.

Créer une file d'attente

Continuez à créer une file d'attente basée sur Exemple de code.

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

La «file d'attente» est créée.

Faire et lancer un message

Enfin, créez un Message et plongez-vous dans ʻExchange`. Voir Référence plutôt qu'un exemple de code.

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

Il semble que «Hello, World» soit correctement inclus. Autour Recevez des messages.

Prendre un message

Le Message qui ne peut pas être pris est juste une poubelle, alors prenez-le. Exemple de code

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

résultat

ubuntu@ubuntu:~$ python consume.py
Hello, World

«Hello, World» s'affiche.

Si vous n'appelez pas message.ack (), le message ne disparaîtra pas de Queue.

Environnement

RabbitMQ

Construit avec Docker + docker-compose

docker-compose.yml

rabbit:
    image: rabbitmq:3-management
    hostname: rabbit001
    ports:
        - "15672:15672"
        - "5672:5672"

kombu

Installer avec pip normalement

pip install kombu

Recommended Posts

Messagerie avec AMQP à l'aide de kombu
Lors de l'utilisation d'optparse avec iPython
Essayez d'utiliser PythonTex avec Texpad.
Utilisation de Graphviz avec Jupyter Notebook
[S3] CRUD avec S3 utilisant Python [Python]
Utilisation de Quaternion avec Python ~ numpy-quaternion ~
Essayez d'utiliser matplotlib avec PyCharm
[Python] Utilisation d'OpenCV avec Python (basique)
Utiliser une imprimante avec Debian 10
Essayez d'utiliser le folium avec anaconda
Utiliser OpenCV avec Python @Mac
Envoyer en utilisant Python avec Gmail
Compléter python avec emacs en utilisant company-jedi
Moyenne harmonique par Python (en utilisant SciPy)
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Japaneseize Matplotlib avec Alpine en utilisant Docker
Utilisation de Rstan de Python avec PypeR
Cours ROS 108 Utilisation de la base de données (mongo) avec ROS
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
[Python] Utilisation d'OpenCV avec Python (détection des bords)
Utilisation de sessions et de réflexions avec SQL Alchemy
Utilisation du japonais avec IPython @ Windows de Rodeo
Notes sur l'utilisation de rstrip avec python.
Créez une API en utilisant hug avec mod_wsgi
Utilisation de Chainer avec CentOS7 [Construction de l'environnement]
Facile avec Slack en utilisant Bot #NowPlaying
Essayez d'utiliser le networkx de Python avec AtCoder
Utiliser une webcam avec Raspberry Pi
Lors de l'utilisation de MeCab avec python dans virtualenv
Précautions lors de l'utilisation de six avec Python 2.5