Langages et technologies utilisées

  • PHP
  • RabbitMQ (AMQP)
  • Docker

Objectif

Utiliser un agent de message pour traiter certaines tâches lourdes de manière décentralisée afin d'alléger certains traitements et pouvoir gérer au mieux les pics de charge et les échecs de traitement liés notamment à l'absence temporaire de réponse de certaines API en remettant sous certaines conditions les messages dans la file.

Réalisation

Pour ce projet j'ai choisi d'utiliser "RabbitMQ" qui est un logiciel d'agent de messages open source qui implémente le protocole "Advanced Message Queuing" (AMQP). Je l'ai implémenté de façon décentralisé en utilisant "Docker" qui est un outil qui permet d'empaqueter une application et ses dépendances dans un conteneur isolé qui pourra être exécuté sur n'importe quel serveur.
Il fonctionne de manière très simple en 3 étapes qui sont, la création d'une file de message, l'ajout de message à cette file et le traitement de ces messages à l'aide d'un "worker" indépendant qui récupère les messages.
J'ai donc crée différentes files avec leurs "workers" associés pour les cas suivants :

  • Gérer la génération des données nécessaires au template de la confirmation de commande
  • Gérer l'envoi de mail commerciaux
  • Gérer l'ajout via une API, de nos clients à la base de donnée de notre prestataire de mail promotionnel (newsletters)