RabbitMQ et Symfony 4 : introduction

Logo RabbitMQRabbitMQ est un outil intéressant qui permet à une application ou site web, de se décharger de certaines tâches qui peuvent se faire de manière asynchrones et/ou par d’autres briques applicatives.

Son fonctionnement comprend quelques termes nouveaux :

« RabbitMQ est un message broker, son rôle est de transporter et router les messages depuis les publishers vers les consumers. Le broker utilise les exchanges et bindings pour savoir si il doit délivrer, ou non, le message dans la queue. »

Pour en rajouter, voici la définition du protocole utilisé par RabbitMQ :

AMQP (Advanced Message Queueing Protocol) is a network protocol that can deliver messages from one application endpoint to another application endpoint. It does not care about the platform or language of said applications, as long as they support AMQP.

Avec le petit schéma qui va bien :

Exchanges Topic Fanout Direct

Pour prendre un exemple concret, sur un site e-commerce le passage d’une commande peut engendrer un certain nombre d’actions (ajout de la commande en BDD, décrémentation de stock, email transactionnel, intégration de données marketing etc.).

Plutôt que de lancer ces actions côté serveur et faire patienter le client durant le traitement, il est possible de pousser un ou plusieurs messages “type” dans RabbitMQ, qui selon certaines règles ira alimenter des files d’attentes, qui seront alors consommer par des applications tierces.

Exemple : mon application “mailing” ira consommer la liste des emails de confirmation de commande à envoyer aux clients.

Voilà comment démarrer avec RabbitMQ et Symfony :

Installation des paquets PHP

sudo apt install php-amqp php-amqplib

Au sein du projet SF4

composer require php-amqplib/php-amqplib symfony/messenger symfony/serializer-pack

Installation de RabbitMQ : https://www.rabbitmq.com/install-debian.html#apt

Ajouter une limite aux process utilisateur

sudo nano /etc/default/rabbitmq-server
ulimit -S -n 4096

Commandes utiles

sudo service rabbitmq-server start
sudo rabbitmqctl status
sudo service rabbitmq-server status

Les logs sont présents dans : /var/log/rabbitmq/rabbit@host.log

Installation rapide du “Management plugin”

sudo rabbitmq-plugins enable rabbitmq_management
sudo service rabbitmq-server restart

Manager disponible ensuite à l’adresse http://localhost:15672/

Pour continuer :
https://github.com/php-amqplib/RabbitMqBundle
https://www.rabbitmq.com/getstarted.html

Share Button

Laisser un commentaire.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.