Das Muster "Event Bus" ist ein architektonischer Ansatz, der die Kommunikation zwischen Komponenten eines Systems durch die Veröffentlichung und das Abhören von Ereignissen ermöglicht. Dabei wissen die Komponenten nicht direkt voneinander, es erfolgt eine lose Kopplung nach dem Prinzip "Publisher-Subscriber".
Verwendung: Dieses Muster ist nützlich, wenn skalierbare und erweiterbare Interaktionen zwischen vielen Modulen erforderlich sind – wie zum Beispiel in komplexen Webanwendungen, Desktop-Systemen und mikroservice-basierten Plattformen.
Beispielcode in Python mit der Bibliothek pyee:
from pyee import EventEmitter bus = EventEmitter() def on_user_created(user): print(f"Benutzer erstellt: {user}") bus.on('user_created', on_user_created) bus.emit('user_created', {"id": 1, "name": "Ivan"})
Hauptmerkmale:
Müssen alle Ereignisse im Event Bus persistent sein?
Nein, das ist nicht unbedingt erforderlich. In den meisten Fällen arbeitet der Event Bus mit ephemeral (flüchtigen) Ereignissen, die nicht gespeichert werden. Persistenz ist nur erforderlich, wenn der Verlust von Ereignissen (z.B. über Kafka) vermieden werden muss.
Geht ein Ereignis verloren, wenn kein Abonnent zum Zeitpunkt der Veröffentlichung registriert ist?
Ja, wenn das System keine Ereignisse speichert (ephemeral), wird das Ereignis verloren gehen. Für garantierte Zustellung wird ein langlebiger Event Bus benötigt (z.B. RabbitMQ mit persistierenden Warteschlangen).
Kann ein einzelner Event Bus ohne Einschränkungen für synchronen und asynchronen Code verwendet werden?
Nein, ein synchroner Event Bus kann den Thread blockieren, bis alle Handler abgeschlossen sind, was für hohe Lasten nicht akzeptabel ist. Für skalierbare Systeme werden asynchrone Event Busse verwendet oder die Verarbeitung von Ereignissen in separate Prozesse/Threads ausgelagert (z.B. über Celery).