Share
Embed
Transcript
28 slides
-
| 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. -
| 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 -
| 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é! -
| 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é -
| 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 -
| 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., -
| 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 ? -
| 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 -
| 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 -
| 13 Demo - Step 0: Installer le composant composer
req symfony/messenger (v>=4) composer req symfony/messenger --no-plugins (v3.4) -
| 15 Demo - Step 1: une API de réservation
simple sans Messenger -
| 16 Demo - Step 2: Créer un message et
un messager Handler -
| 17 Demo - Step 2: Créer un message et
un messager Handler php bin/console debug:messenger -
| 19 Demo - Étape 4: utiliser Messenger dans une
file d'attente asynchrone -
| 20 Demo - Étape 4: Start workers • Consuming
messages: bin/console messenger:consume-messages -vv 4.1<=v<4.3) En production • Pulling messenger_messages: -
| 21 Demo - Étape 5: Retry on failure strategy
• • Retry strategy: • Failure Transport (symfony > = 4.3): -
| 22 Un peu plus de Symfony Messenger • En
production • Branchement avec API Platform • Branchement avec Symfony mailer • Tests Cases • Commandes utiles -
| 23 En production • Restart Workers on deploy :
bin/console messenger:stop-worker -
| 24 Branchement avec API platform • Activer messenger •
Créer un Handler -
| 25 Branchement avec Symfony Mailer (Async Emails) Identifiant du
transport 2/ $mailer->send($email); 1/