RabbitMQ 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 :
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