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

Symfony/Messenger un composant à votre service !

Symfony/Messenger un composant à votre service !

Avec la sortie de Symfony 4.1 fin mai 2018, un nouveau composant officiel fait son entrée sur le marché : Messenger. Il s'agit d'une abstraction autour des files d'attente de message. Ce nouveau composant ouvre la porte à une nouvelle façon de travailler car les traitements asynchrones et la consommation des messages sont maintenant supportés nativement par Symfony.

Qu'est-ce que ça change ? Pourquoi un nouveau composant officiel ? Comment l'intégrer dans un projet ? Quels sont les connecteurs supportés ? Quels bénéfices dans la structure du code ?

Nous avons choisi de faire confiance à ce jeune composant et je vous invite à suivre nos pas à travers les exemples réels de notre implémentation.

0a201e04032d3b383f9047217dd69b9c?s=128

Stéphane HULARD

October 26, 2018
Tweet

Transcript

  1. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 1/27 S /M S /M U ! U !
  2. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 2/27 S H S H CTO, Formateur, Contributeur. @s_hulard    
  3. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 3/27 M ? M ?
  4. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 4/27 P ! P !
  5. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 5/27 O O EVENT EVENT PSR14: Event Manager, Adapter ≠ Informer
  6. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 6/27 A A Interfaces… …et configuration !
  7. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 7/27 V ' … V ' … Message Message Bus Message Handler Application Receiver Sender Message
  8. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 8/27 T … T …
  9. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 9/27 O , ' M ? O , ' M ? class DeleteExamFromSearch { private $exam_uid; public function __construct(Exam $exam) { $this->exam_uid = $exam->id(); } public function getExamUid(): ExamUid { return $this->exam_uid; } }
  10. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 10/27 C ? C ? use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\Messenger\MessageBusInterface; class FlagExam extends Controller { public function __invoke(Exam $exam, MessageBusInterface $bus): Response { // Mise à jour de l'examen et sauvegarde du flag. $bus->dispatch(new DeleteExamFromSearch($exam)); } }
  11. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 11/27 M B ? M B ?
  12. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 12/27 C C MESSENGER.YAML MESSENGER.YAML framework: messenger: transports: default: '%env(MESSENGER_ADAPTER_DSN)%' routing: # Route your messages to the transports
  13. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 13/27 U M … U M … Protocole AMQP, broker
  14. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 14/27 … A … … A … enqueue/messenger-adapter enqueue/enqueue-bundle enqueue/*
  15. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 15/27 … ! … ! framework: messenger: transports: default: enqueue://redis log: enqueue://file routing: 'App\Domain\Exam\Message\DeleteExamFromSearch': [default, log] '*': default
  16. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 16/27 C C
  17. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 17/27 M M namespace Symfony\Component\Messenger\Middleware; interface MiddlewareInterface { public function handle($message, callable $next); }
  18. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 18/27 use Psr\Log\LoggerInterface; use Symfony\Component\Messenger\Middleware\MiddlewareInterface; class LoggingMiddleware implements MiddlewareInterface { private $logger; public function __construct(LoggerInterface $logger) { $this->logger = $logger; } public function handle($message, callable $next) { $this->logger->debug( 'Starting handling message {class}', get_class($message) ); return $next($message); } }
  19. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 19/27 C C # config/packages/messenger.yaml framework: messenger: buses: messenger.bus.default: middleware: - 'App\Middleware\LoggingMiddleware'
  20. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 20/27 T T
  21. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 21/27 D ' H D ' H use Symfony\Component\Messenger\Handler\MessageHandlerInterface; class DeleteFlaggedExam implements MessageHandlerInterface { /** @var ElasticsearchConnection */ private $connection; public function __invoke(DeleteExamFromSearch $message) { $this->connection->removeExam($message->getExamUid()); } }
  22. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 22/27 C C services: App\Domain\Exam\Message\Handler\DeleteFlaggedExam: tags: [messenger.message_handler]
  23. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 23/27 E E Synchrone, ou asynchrone bin/console messenger:consume-messages [amqp]
  24. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 24/27 H , S , R H , S , R Message Message Bus Message Handler Application Receiver Sender Message
  25. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 25/27 S S class SmtpSender implements SenderInterface { /** @var SmtpConnection */ private $connection; public function send($message): void { $this->connection->send( // Transformer le message en e-mail ); } }
  26. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 26/27 C C # config/services.yaml services: App\Transport\SmtpSender: tags: - { name: 'messenger.sender', alias: 'custom_email' } # config/packages/messenger.yaml framework: messenger: routing: App\Domain\Exam\Message\Handler\DeleteFlaggedExam: senders: ['custom_email'] send_and_handle: true
  27. 25/10/2018 Symfony/Messenger un composant à votre service ! - AFUP

    Forum PHP 2018 - Stéphane HULARD / ExoSkills http://localhost:8001/talks/afup-forum-php-2018-symfony-messenger/?print-pdf#/ 27/27 https://joind.in/24671