Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction au composant Symfony Messenger

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Introduction au composant Symfony Messenger

Avatar for Ahmed EBEN HASSINE

Ahmed EBEN HASSINE

January 07, 2026
Tweet

More Decks by Ahmed EBEN HASSINE

Other Decks in Programming

Transcript

  1. | 2 Ce que nous allons voir • Problématique derrière

    symfony messenger • Comment gérer les traitement lourds, et les traitements en arrière plan • Qu'est-ce qu'un Message Queue • Symfony messenger en détail • Demo: Refactoring d’une api de réservation.
  2. | 3 Pourquoi Symfony Messenger • • • • Un

    outil maintenu par le Core Team Symfony • Mieux communiquer à travers des messages • Brancher un système de queuing • Très bonne expérience développeur • Des fonctionnalités de routage à travers des middleware pour intercepter les messages et les router vers le bon Transport. • Recommandé par IBEXA XD
  3. | 4 Problématique • Pourquoi on fait recours à des

    traitements de messagerie? • Comment mettre un système de file d’attente? • Pourquoi ne pas utiliser l’event dispatcher? • Gérer les problèmes de ressources et de scalabilité!
  4. | 7 Qu'est-ce qu'un Message Queue et Pourquoi • Communication

    est asynchrone. • Fiabilité des échanges. • Évolutivité et les performances. • La persistance • Contrôle, traçabilité • Découplage • La scalabilité et haute disponibilité
  5. | 8 Use cases • Archive contenant toutes les dernières

    factures • Envoie des mails • Importer des contenus eZ, why not! • RGPD, Télécharger des informations confidentiels. • Un site e-commerce le passage d’une commande 1. Changer le statut de sa commande 2. Mettre à jour les stocks 3. Envoyer un email de confirmation au client 4. Prévenir le service de préparation de cette nouvelle commande 5. Envoyer des metrics pour suivre le volume des ventes
  6. | 9 EVENT DISPATCHER VS SYMFONY MESSENGER • Event Dispatcher

    Messenger - PSR14 (dispatcher function) - Event sourcing pattern - Synch - Un feedback instantané $eventDispatcher->dispatch() (expecting an instance of the event class ) - PSR14 - Event sourcing pattern - Asynch (Traitement lourd) - Later (ack) - $messenger->dispatch() (expecting an instance of the message class ) Scalabilité, performance, persistance, une bonne gestion des erreurs.,
  7. | 10 Symfony Messenger en détail * Permet d’envoyer et

    de recevoir facilement des messages dans une file d’attente, qui seront consommé ultérieurement. Il nous fournit quoi ?
  8. | 11 Symfony Messenger : Il nous fournit quoi ?

    • Message : Un objet DTO serializable, notre Commande. • Enveloppe: metadata, stamps. • Bus : collections de middlewares CommandBus, QueryBus, EventBus: La plupart des gens utilisent Messenger comme un "bus de commande". • Midelwars: dispatcher le message, sérialisation/désérialisation, exécuter le handler approprié. (senderMidellware / Handler Middleware) • Handler(worker) : La classe qui va recevoir un message à exécuter. • Transport: Il permet de faire transiter les messages via différents broker. • Receiver : Deserialize le message reçu via le bus et le transmet au bon handler. • Sender : Serialize le message et le transmet au queue manager via le bus. • Data collector : une service for debugging on DEV permet d’avoir les messages dispatché sur le profiler
  9. | 12 Messenger flow Synchronous Receiver Sender Handler Bus Controlleur

    Transport (dsn) dispatch() __invoke() receive() send() dispatch() Broker ex: rabbitmq, redis, doctrine, sqs... driver • SendMissageMidellware • HandelMessageMidellware • LogMessageMidellware … MessageBusInterface messenger.message_handler Worker file d'attente Asynchronous
  10. | 13 Demo - Step 0: Installer le composant composer

    req symfony/messenger (v>=4) composer req symfony/messenger --no-plugins (v3.4)
  11. | 17 Demo - Step 2: Créer un message et

    un messager Handler php bin/console debug:messenger
  12. | 20 Demo - Étape 4: Start workers • Consuming

    messages: bin/console messenger:consume-messages -vv 4.1<=v<4.3) En production • Pulling messenger_messages:
  13. | 21 Demo - Étape 5: Retry on failure strategy

    • • Retry strategy: • Failure Transport (symfony > = 4.3):
  14. | 22 Un peu plus de Symfony Messenger • En

    production • Branchement avec API Platform • Branchement avec Symfony mailer • Tests Cases • Commandes utiles
  15. | 23 En production • Restart Workers on deploy :

    bin/console messenger:stop-worker