Aujourd'hui, les utilisateurs s'attendent à ce que les applications soient rapides et réactives, ce qui peut être un défi lorsqu'il s'agit de tâches à forte intensité de ressources. Au lieu de faire en sorte qu'un utilisateur attende un rapport pour générer, une vidéo à traiter ou un grand fichier à télécharger, vous pouvez décharger ces tâches sur l'arrière-plan. C'est là que le traitement asynchrone entre en jeu et le composant Symfony Messenger est l'outil parfait pour le travail.
Dans une application Web synchrone traditionnelle, la demande d'un utilisateur déclenche une série d'actions qui doivent être terminées avant qu'une réponse ne soit renvoyée au navigateur. Si l'une de ces actions, comme l'envoi d'un e-mail ou la génération d'un PDF, prend plusieurs secondes pour terminer, l'expérience utilisateur en souffre. L'onglet du navigateur est laissé dans un état «en attente» et l'utilisateur peut supposer que l'application a figé.
Ce modèle synchrone limite également l'évolutivité. Un seul serveur Web ne peut gérer que de nombreuses demandes simultanées, et si quelques-unes sont liées à des tâches de longue durée, elle peut rapidement épuiser les ressources disponibles.
Symfony Messenger fournit un moyen puissant et élégant de découpler la logique de votre application. Il s'agit d'un bus de messages qui vous permet d'envoyer des «messages» (objets de données simples) à gérer plus tard par un processus séparé, instance, charge de travail. Cette approche est basée sur le modèle producteur-consommateur, où votre application Web agit en tant que producteur, et un travailleur de fond agit en tant que consommateur.
Message: une classe PHP simple qui contient les données nécessaires pour effectuer une tâche. Il ne doit contenir aucune logique. Par exemple, SendReportMessage peut contenir un utilisateur et un rapport de rapport.
Handleur de messages: un service qui contient la logique métier réelle pour un message spécifique. Lorsqu'un message est reçu par le consommateur, le gestionnaire correspondant est invoqué pour effectuer la tâche.
Bus de message: le répartiteur central qui achemine les messages vers leur destination prévue. Symfony Messenger fournit un bus par défaut, mais vous pouvez configurer plusieurs bus à différentes fins (par exemple, un bus de commande et un bus d'événements).
Transport: le mécanisme qui stocke et livre des messages. C'est le cœur du traitement asynchrone. Symfony Messenger prend en charge divers transports hors de la boîte, notamment la doctrine, le lapin (AMQP), Redis, SQS
Consommateur / travailleur: un process...
[Courte citation de 8% de l'article original]