Messenger Flashcards
Quels sont les 2 composantes essentiels de Messenger
une class Message (data) + une class Handler (read data + process)
quels sont les composantes d’une class Message Handler de Messenger
doit être Callable (__invoke()) + Attribute #[AsMessageHandler]
comment lister tous les Messenger Handler
php bin/console debug:messenger
comment procéder pour envoyer un message
utiliser le service MessageBusInterface avec la methode dispatch() et en argument la class Message (le handler sera ensuite invoker)
que fait-il faire pour faire du Messenger Async
utiliser un Transports (send to queueing + receive via worker)
comment est enregistrer un Messenger
par une config DSN
comment est configurer un Messenger
config/packages/messenger.yaml (framework:messenger:transports)
comment déclarer un message en Async
framework:messenger:routing:’ClassMessage’: async
quel probleme doit etre eviter quand on utilise l’héritage de class Messenger
si on déclare à la fois le parent et le child d’un message alors il sera expédié 2 fois
Que faut-il éviter de faire si on souhaite travailler avec une Entity pour data d’un Message
ne pas envoyer l’objet entity tel quel mais uniquement son ID et c’est le handler qui sera en charge de le reloader avec son ID.
comment lancer le worker SF pour les messages
php bin/console messenger:consume async
a quoi faut-il faire attention avec le worker messenger SF en prod
1/ ne pas le laisser run forever 2/ utiliser un process control pour gérer les workers (supervisor ou systemd) 3/ stopper les workers si errors 4/restart workers on deploy 5/ use same cache namespace between deploy
comment gérer la priorité entre des messages
il faut créer des transport différents tagger par des priorités différentes et ensuite déclarer les messages suivant ces tag de transport priorité
comment consume unique les messages de haut priorité
php bin/console messenger/consume async_priority_high
a quoi est lié le transport SF par rapport au broker
SF transport est lié par l’exchange du broker
que fais par defaut le worker SF par rapport au broker
il consume toutes les queues de l’exchange
Comment dire à SF worker de ne consume que les messages de certaines queue de l’exchange
pgp bin/console messenger:consume my_transport –queus=fasttrack
comment obtenir des stats par rapport au worker
php bin/console messenger:stats
comment faire un sorte d’avoir un worker Stateless qui ne conserve pas de state de service SF entre chaq message
il faut faire en sorte que les services impl l’I ResetInterface et call la methode reset() entre chq message
Comment gérer les error d’envoi de messages
utiliser une “retry_strategy” dans la config avec les options suivantes : max_retries, delay, multiplier, max_delay, jitter
Comment éviter de retry une error d’envoi de message
il faut lancer une exception “RecoverableMessageHandlingException”
comment gérer les messages qui sont en error au max_retries
il faut créer un transport spécial error pour pouvoir les gérer
comment passer des options de transport DSN
dans la string DSN directement ou dans la config
comment passer des options supplémentaires spécifique à un message
dans le message meme il faut utiliser AmqpStamp class
comment utiliser Doctrine avec messenger
avec le bundle symfony/doctrine-messenger
comment Trigger une command avec un message SF
dans le dispatcher il faut utiliser un obj RunCommandMessage
comment Trigger un process system avec un message SF
dans le dispatcher il faut utiliser un obj RunProcessMessage
comment Trigger un ping de WS avec un message SF
dans le dispatcher il faut utiliser un obj PingWebhookMessage
est-il possible de faire du transactionnal message
oui un handler de message peut également dispatch de new message à son tour
comment process many message with batch
en extends BatchHandlerInterface et use BatchHandlerTrait
comment ajouter un delay de process coté broker pour un message
en ajoutant un DelayStamp au message (info qui se traité par le broker)
quel sont les 9 Event pouvant être listener en rapport à Messenger
SendMessageToTransportEvent, WorkerMessageFailedEvent, WorkerMessageHandledEvent, WorkerMessageReceivedEvent, WorkerMEssageRetriedEvent, WorkerRateLimited, WorkerRunningEvent, WorkerStartedEvent, WorkerStoppedEvent
comment faire si le message receptionné par le handler n’est pas du format classique JSON
il faut utiliser un serializer dédié
que doit-on faire si on veut faire du CQRS avec messenger
séparer les Bus Message en 3 : Command, Query & Event
comment redispatcher un message dans le handler
il faut utiliser la Class RedispatchMessage