Event Bus
L'infrastructure qui permet une communication asynchrone entre services au moyen d'événements.
Qu’est-ce qu’un Event Bus ?
C’est le mécanisme qui permet à un service de publier un fait pertinent et à d’autres services d’y réagir sans avoir besoin d’appels directs immédiats.
Par exemple :
ms-orderspublieOrderPlacedms-inventoryconsomme cet événementms-notificationsle consomme également
Pourquoi utiliser des événements ?
Parce qu’ils aident à :
- découpler les services dans le temps
- réduire les dépendances synchrones
- permettre des réactions multiples à un même fait
- construire des processus distribués
Responsabilités principales
- Transport des événements
- Publication et abonnement
- Nouvelles tentatives
- Gestion des messages en échec
- Prise en charge des DLQ
- Soutien aux processus distribués
Ce qu’il ne devrait pas être
L’event bus ne devrait pas devenir un endroit où réside la logique métier centrale. La logique de réaction doit se trouver dans les services consommateurs.
Il ne devrait pas non plus servir de prétexte pour publier des événements ambigus ou mal définis.
Concepts importants
Événement de domaine
Représente quelque chose de significatif qui s’est produit dans le métier.
Idempotence
Nécessaire car les messages peuvent arriver plus d’une fois.
Dead Letter Queue
Endroit où vont les messages qui n’ont pas pu être traités correctement.
At-least-once delivery
Garantie courante chez de nombreux brokers : le message arrivera au moins une fois, mais peut être dupliqué.
Trade-offs
Bénéfices
- Découplage
- Scalabilité
- Intégration plus flexible
- Traitement distribué
Coûts
- Davantage de complexité opérationnelle
- Cohérence à terme
- Observabilité plus difficile
- Besoin de nouvelles tentatives et d’idempotence
Exemple pratique
Une commande est créée et confirmée.
ms-orders publie OrderPlaced.
À partir de là :
- inventory décrémente le stock
- notifications envoie la confirmation
- analytics enregistre l’événement
Aucun n’a besoin d’être appelé directement dans le même flux synchrone.
Résumé
L’Event Bus permet une communication asynchrone entre services. Sa valeur réside dans le découplage et la distribution des responsabilités, mais il exige plus de discipline en matière de contrats, d’observabilité et d’idempotence.