Les problèmes que nous réglons
-
Des événements perdus quand un service plante entre l'écriture en base et la publication.
-
Le même message traité deux fois : stock réservé en double, e-mail envoyé deux fois.
-
Une topologie RabbitMQ qui grossit à chaque nouveau cas d'usage.
-
Des contrats de messages qui cassent en production alors que les tests passaient.
-
Des interfaces qui interrogent le serveur en boucle pour voir un changement.
Ce que nous mettons en place
-
Une topologie simple : une exchange, une queue par service consommateur.
-
Le pattern outbox côté émetteur, l'idempotence côté consommateur.
-
Des contrats versionnés : JSON Schema, DTO et tests de non-régression.
-
Une gestion des erreurs explicite : retry, dead letter queue, rejeu.
-
La diffusion temps réel vers les interfaces avec Mercure.
-
Un choix de broker argumenté : RabbitMQ, Kafka, ou les deux.
Articles
Consommateur idempotent avec Symfony Messenger : la table processed_event
Un même événement peut arriver deux fois. Une table processed_event, écrite dans la même transaction que l'effet, écarte le doublon avec Symfony Messenger.
Mis à jour le 02 oct. 202611 min de lecture
Contrats de messages en monorepo : JSON Schema et DTO
En monorepo, un changement de message passe les tests puis casse en production. Un package de contrats, des ajouts optionnels et des fixtures figées l'évitent.
Mis à jour le 02 oct. 202611 min de lecture
Découper une architecture événementielle : les six axes à décider
Données, messages, transport, diffusion, code partagé, transactions : les six axes d'une architecture événementielle, la carte des services et les procédures.
Mis à jour le 02 oct. 202611 min de lecture
Le pattern Outbox avec Symfony Messenger : publier sans perdre d'événement
Écrire en base puis publier peut perdre un événement. L'outbox l'écrit dans la même transaction, un relais le publie : Symfony Messenger, Doctrine, PostgreSQL.
Mis à jour le 02 oct. 202611 min de lecture
RabbitMQ : une seule topic exchange et une queue par service consommateur
Plusieurs services réagissent au même événement ? Une seule topic exchange, une queue par service et des clés de routage versionnées, avec Symfony Messenger.
Mis à jour le 01 oct. 20269 min de lecture