Message Router
Nachrichten nach Regeln an den passenden Kanal leiten
Die Idee und ihr Nutzen
Das Kundenportal einer Versicherung nimmt Schadenmeldungen für Kfz- und für Hausratversicherungen entgegen. Kfz-Schäden bearbeitet das Kfz-Team, Hausratschäden das Hausratteam, und jedes Team holt seine Meldungen aus einem eigenen Nachrichtenkanal. Ein Nachrichtenkanal, kurz Kanal, ist eine benannte Ablage, in die ein Programm Nachrichten legt und aus der ein anderes Programm sie abholt. Das Kundenportal soll die Zuständigkeiten der Teams nicht kennen müssen und schickt deshalb alle Meldungen in einen gemeinsamen Eingangskanal. Ein eigenes Verteilprogramm liest bei jeder Meldung die Sparte, also Kfz oder Hausrat, und leitet die Meldung in den Kanal des zuständigen Teams weiter. Dieses Verteilprogramm heißt Message Router, auf Deutsch Nachrichtenverteiler, kurz Router.
Wie funktioniert es?
Ein Kunde meldet im Kundenportal einen Auffahrunfall. Das Kundenportal legt die Meldung „Auffahrunfall · sparte: kfz“ in den Eingangskanal schadenmeldungen. Der Router liest die Meldung und findet im Feld sparte den Wert kfz. Nach seiner Regel für diese Sparte legt der Router die Meldung unverändert in den Kfz-Kanal, aus dem das Kfz-Team sie abholt. Eine Stunde später meldet eine Kundin einen Einbruch. Das Kundenportal legt die Meldung „Einbruch · sparte: hausrat“ in denselben Eingangskanal, und der Router legt diese Meldung in den Hausratkanal, den das Hausratteam liest. Jede Meldung geht an genau einen Kanal. Für Meldungen, auf die keine Regel passt, gibt es einen eigenen Fehlerkanal. Trägt eine Meldung eine unbekannte Sparte, legt der Router die Meldung in den Fehlerkanal und löst eine Warnung aus, damit die Meldung nicht stillschweigend verloren geht.
Die Programme der Versicherung tauschen Meldungen als Nachrichten aus, also als Datenpakete, die über die Kanäle einer Nachrichtenplattform laufen. Das Kundenportal legt eine Meldung ab und arbeitet weiter, und das zuständige Team holt die Meldung ab, sobald es bereit ist. Das Kundenportal und die Bearbeitungsprogramme des Kfz-Teams und des Hausratteams rufen einander nicht direkt auf und werden unabhängig voneinander geändert und ausgeliefert. Das Kundenportal und die Teams kennen nur ihre Kanäle, nur der Router kennt die Regeln. Die Regeln pflegt das Team, das den Router betreut. Der Router entscheidet nur, in welchem Kanal eine Meldung landet. Er prüft nicht, ob das zuständige Team die Meldung tatsächlich bearbeitet. Die Regeln können auf verschiedenen Merkmalen beruhen. Eine Regel kann nach der Art der Nachricht entscheiden, etwa Schadenmeldung oder Adressänderung. Eine Regel kann auch nach Zusatzangaben in den Kopfzeilen entscheiden, die vor dem eigentlichen Inhalt der Nachricht stehen, etwa nach dem Namen des absendenden Programms. Eine Regel kann auch nach dem Inhalt entscheiden oder nach äußeren Umständen wie der Uhrzeit oder der Auslastung der Empfänger. Einige Sonderformen haben eigene Namen. Der Content Based Router entscheidet nach dem Inhalt der Nachricht, so wie der Router der Versicherung nach dem Feld sparte. Die Recipient List schickt eine Nachricht an mehrere Empfänger, die der Router für jede Nachricht neu bestimmt. Beim Dynamic Router melden die Empfänger während des Betriebs selbst an, welche Nachrichten sie erhalten wollen, etwa das Kfz-Team alle Meldungen mit sparte: kfz.
Fällt der Router aus, bleiben die Meldungen im Eingangskanal liegen, bis der Router wieder läuft. Die Meldungen gehen dabei nicht verloren, werden aber auch von keinem Team bearbeitet.
Message Router: Meldungen nach Sparte weiterleiten
Wann ist es sinnvoll und wann nicht?
Ein Message Router lohnt sich
- Nachrichten aus einer Quelle müssen an verschiedene Ziele verteilt werden, die sich mit der Zeit ändern. Welche Sparte welches Team bearbeitet, entscheidet die Organisation der Versicherung. Die Zuordnung ändert sich zum Beispiel, wenn Teams umgebildet werden. Ohne Router steht die Zuordnung im Kundenportal und muss bei jeder Umbildung dort geändert werden.
- Der Absender soll die Zuständigkeiten der Empfänger nicht kennen müssen. Wählt das Kundenportal selbst den richtigen Kanal, muss das Kundenportal alle Zuständigkeiten kennen. Ändert sich eine Zuständigkeit, muss das Kundenportal dann geändert und neu ausgeliefert werden, obwohl sich an der Erfassung der Meldung nichts geändert hat.
- Neue Sparten kommen hinzu. Im nächsten Jahr bietet die Versicherung zum Beispiel Wohngebäudeversicherungen an. Das Team, das den Router betreut, ergänzt dafür im Router eine Regel für
sparte: wohngebaeudeund einen neuen Kanal. Ohne Router müsste das Kundenportal den neuen Kanal selbst kennen. Das Kundenportal muss nur geändert werden, wenn es Meldungen für die neue Sparte noch nicht erfassen kann. Dass das Kundenportal alle Meldungen in den Eingangskanal legt, bleibt gleich. - Jede Meldung soll in genau einem Kanal landen. Schickt das Kundenportal jede Meldung an beide Teams, muss jedes Team die fremden Meldungen aussortieren, und im schlimmsten Fall bearbeiten beide Teams dieselbe Meldung.
- Die Zuordnung der Sparten zu Kanälen soll in einem einzigen Programm stehen. Wer wissen will, welcher Kanal die Meldungen mit
sparte: hausraterhält, liest das in den Regeln des Routers nach. Den Code des Kundenportals und der Bearbeitungsprogramme muss dafür niemand durchsuchen.
Ein Message Router ist nicht das Richtige
- Jede Nachricht soll ohnehin an alle Interessierten gehen, etwa jede Schadenmeldung an ein Statistikprogramm und an ein Archiv, die beide alle Meldungen brauchen. Der Router hätte dann nichts zu entscheiden. Dann legt das Kundenportal jede Meldung in ein Thema, also einen Kanal, aus dem jeder angemeldete Empfänger jede Nachricht erhält. Statistikprogramm und Archiv melden sich für das Thema an. Dieses Vorgehen heißt Publish Subscribe. Ein Router, dessen Regeln jemand pflegen muss, entfällt.
- Jedes Team soll selbst entscheiden, welche Meldungen es annimmt. Mit Router müsste das Kfz-Team für jede Änderung seiner Zuständigkeit das Team bitten, das den Router betreut, die Regel zu ändern. Dann legt das Kundenportal alle Meldungen in ein gemeinsames Thema, und das Bearbeitungsprogramm jedes Teams filtert die passenden Meldungen heraus. Ändert sich eine Zuständigkeit, ändern nur die betroffenen Teams ihren Filter, ohne das Team, das den Router betreut. Dabei kann es aber vorkommen, dass eine Meldung von keinem oder von zwei Teams angenommen wird.
- Es gibt nur ein einziges Ziel, und der Router hätte nichts zu verteilen. Dann legt das Kundenportal die Meldung direkt in den Kanal dieses Ziels. Ein Router und ein Eingangskanal, die betrieben und überwacht werden müssen, entfallen.
Nachteile und typische Fehler
Der Router ist ein zusätzliches Programm, das ausfallen kann und überwacht werden muss. Der Router muss alle Ziele kennen. Bei sehr vielen Regeln wird er selbst schwer zu überblicken und zu pflegen, und jede neue Sparte oder geänderte Zuständigkeit bedeutet eine Änderung am Router. Weil alle Meldungen durch den Router laufen, muss er so ausgelegt sein, dass er auch zu Spitzenzeiten alle Meldungen rechtzeitig weiterleitet. Jemand muss den Fehlerkanal lesen und die Meldungen darin von Hand zuordnen.
Typische Fehler und woran man sie erkennt:
- Ausgefallener Router: Der Router läuft nicht, und alle Meldungen bleiben im Eingangskanal liegen. Erkennbar ist das an einer wachsenden Zahl wartender Nachrichten im Eingangskanal
schadenmeldungen, während die Kanäle der Teams leer bleiben. - Beliebiges Standardziel: Der Router hat keinen Fehlerkanal. Meldungen, auf die keine Regel passt, legt der Router in einen Standardkanal, den kein Team liest, oder verwirft sie. Das Kundenportal erfasst zum Beispiel schon Meldungen mit
sparte: wohngebaeude, bevor das Team, das den Router betreut, die Regel dafür ergänzt hat. Kein Team erfährt von diesen Meldungen, und die gemeldeten Schäden bleiben unbearbeitet. Erkennbar ist das an Kunden, die nachfragen, warum sich niemand um ihren Schaden kümmert. - Überlappende Regeln: Zwei Regeln passen auf dieselbe Meldung, und der Router legt die Meldung in beide Kanäle. Eine Regel leitet zum Beispiel alle Meldungen mit
sparte: kfzin den Kfz-Kanal. Eine später ergänzte Regel leitet alle Glasschäden in den Hausratkanal. Eine Meldung zu einer gesprungenen Windschutzscheibe passt auf beide Regeln. Erkennbar ist das an Schäden, die von zwei Teams gleichzeitig bearbeitet werden. - Fachregeln im Router: Der Router prüft zusätzlich Schadenhöhen oder ändert Felder der Meldung. Der Router berechnet zum Beispiel aus der Schadenhöhe eine Dringlichkeit und schreibt sie in die Meldung. Ändert die Versicherung die Grenze für dringende Schäden, muss das Team, das den Router betreut, den Router ändern und neu ausliefern, obwohl sich an der Verteilung nichts ändert. Erkennbar ist das, wenn jede fachliche Änderung auch eine Änderung am Router erfordert.
- Unbeachteter Fehlerkanal: Der Router löst für jede Meldung im Fehlerkanal eine Warnung aus, aber die Warnung geht an ein Postfach, das niemand liest. Niemand ordnet die Meldungen im Fehlerkanal von Hand zu. Erkennbar ist das an Meldungen, die seit Tagen im Fehlerkanal liegen.
Weiterführend
Verwandte Ansätze
- Content Based Routing: die Form des Routers, die nach dem Inhalt einer Nachricht entscheidet, ausführlich beschrieben.
- Message Translator: wandelt Nachrichten in ein anderes Format um, statt sie weiterzuleiten. Router und Message Translator werden oft hintereinander eingesetzt.
- Pipes and Filters: beschreibt Verarbeitungsketten aus einzelnen Schritten. Ein Router kann eine Kette in mehrere Zweige aufteilen.
Werkzeuge und Umsetzungen
- Apache Camel: enthält alle genannten Formen von Routern als fertige Bausteine.
- Spring Integration: bietet Router für Java-Anwendungen, die nach Nachrichtenart, Kopfzeilen oder eigenem Code entscheiden.
- RabbitMQ: Nachrichtenplattform, deren Verteiler, sogenannte Exchanges, Nachrichten nach Regeln an Warteschlangen weiterleiten.
- Apache NiFi: leitet Datenflüsse über eine grafische Oberfläche nach Merkmalen an verschiedene Ziele.
Quellen
- Gregor Hohpe, Bobby Woolf (Enterprise Integration Patterns): Message Router: Originalbeschreibung des Musters; der Router liest aus einem Kanal, leitet nach Bedingungen weiter und lässt den Inhalt unverändert.
- Gregor Hohpe, Bobby Woolf (Enterprise Integration Patterns): Content-Based Router: beschreibt die Entscheidung nach dem Inhalt und warnt, dass ein solcher Router häufig gepflegt werden muss.
- Spring Integration Reference: Common Router Parameters: offizielle Dokumentation; zeigt, was mit Nachrichten geschieht, für die keine Regel einen Kanal findet, vom Fehler bis zum stillen Verwerfen.