Wann man dazu greift
- Viele Agenten oder Dienste lose gekoppelt sind.
- Ereignisse an mehrere Empfänger gehen.
- Erweiterbarkeit ohne zentrale Abhängigkeiten wichtig ist.
/pattern/pubsub-mesh/
Agenten publizieren auf benannte Topics und abonnieren sie auf einem gemeinsamen Bus, statt sich direkt aufzurufen, sodass ein Publisher nie weiß, wer seine Ereignisse konsumiert, und Subscriber hinzugefügt oder entfernt werden können, ohne den Publisher anzufassen.
In der PraxisEine Sensor-Überwachungsplattform veröffentlicht `anomaly.detected`-Ereignisse auf einem gemeinsamen Bus; drei unabhängige Agenten – Alarmierung, Protokollierung und automatische Fehlerbehebung – abonnieren jeweils und reagieren unabhängig, ohne voneinander zu wissen.
Wann man dazu greift
Wann es nach hinten losgeht
Die Abwägung
Skalierbare Entkopplung wird auf Kosten komplexerer Zustellung, Debugging und Governance gewonnen.
Nachrichten werden an alle interessierten Subscriber verteilt.
Topics werden ad-hoc geprägt; Quasi-Synonyme vermehren sich; Agenten abonnieren das eine und verpassen Nachrichten, die unter dem anderen veröffentlicht wurden. Die Benennung ist die Bug-Oberfläche des Systems.
Lösung · Topic-Definitionen in einer Registry mit Beschreibungen und Zuständigkeit zentralisieren. Veröffentlichungen auf nicht registrierten Topics am Broker ablehnen.
Der Bus stellt ein Ereignis erneut zu, nachdem das Consumer-Ack abgelaufen ist. Ein nicht idempotenter Handler führt den Seiteneffekt zweimal aus — eine zweite Abbuchung, eine doppelte Bestellung, eine verdoppelte Metrik.
Lösung · Handler idempotent über die Event-ID gestalten und beim Consumer innerhalb eines Fensters deduplizieren; niemals Exactly-once vom Broker annehmen.
Weitermachen
Patterns, Frameworks und Seiten durchsuchen.