Le modèle "Bus d'événements" (Event Bus) est une approche architecturale permettant de réaliser la communication entre les composants d'un système par la publication et l'écoute d'événements. Les composants ne se connaissent pas directement, l'interaction se fait de manière faiblement couplée selon le principe "éditeur-abonné".
Utilisation : Ce modèle est utile là où il est nécessaire de garantir une interaction évolutive et extensible entre de nombreux modules - par exemple, dans des applications web complexes, des systèmes de bureau ou des plateformes de microservices.
Exemple de code en Python utilisant la bibliothèque pyee :
from pyee import EventEmitter bus = EventEmitter() def on_user_created(user): print(f"Utilisateur créé : {user}") bus.on('user_created', on_user_created) bus.emit('user_created', {"id": 1, "name": "Ivan"})
Caractéristiques principales :
Tous les événements dans le Bus d'événements doivent-ils être persistants ?
Non, ce n'est pas nécessaire. Dans la plupart des cas, le Bus d'événements traite des événements éphémères qui ne sont pas sauvegardés. La persistance n'est nécessaire que si il est crucial de ne pas perdre des événements (par exemple, via Kafka).
Un événement sera-t-il perdu si aucun abonné n'est enregistré au moment de la publication ?
Oui, si le système ne conserve pas les événements (éphémères), l'événement sera perdu. Pour une livraison garantie, un Bus d'événements durable est nécessaire (par exemple, RabbitMQ avec des files d'attente persistantes).
Peut-on utiliser un seul Bus d'événements pour du code synchronisé et asynchrone sans restrictions ?
Non, un Bus d'événements synchrones peut bloquer le fil d'exécution jusqu'à la fin de tous les gestionnaires, ce qui est inacceptable pour une charge élevée. Pour des systèmes évolutifs, on utilise des Bus d'événements asynchrones ou on déplace le traitement des événements dans des processus/fils séparés (par exemple, via Celery).