Ich mache ein Forschungsprojekt, in dem ich die Optionen erforsche, um Änderungen in einer ereignisgesteuerten Microservice-Architektur zu handhaben.
Nehmen wir also an, wir haben eine Anwendung, in der wir vier verschiedene Dienste haben. Jeder dieser Dienste verfügt über eine eigene Datenbank zum Speichern lokaler Daten.
In diesem Setup kommunizieren die vier Dienste über einen Ereignisbus miteinander. Wenn also in einem Dienst etwas passiert, wird ein Ereignis veröffentlicht. Alle anderen Dienste, die an dieser Veranstaltung interessiert sind, werden sie auf ihre eigene Weise verarbeiten.
In diesem Fall müssen die verschiedenen Dienste in der Architektur "Verträge" über den Inhalt dieser Ereignisse (Attribute usw.) haben. Dienste haben also eine "lose gekoppelte Abhängigkeit" von diesen Ereignissen
Meine Frage ist: Wie können wir mit Änderungen in diesen Ereignissen umgehen?
Angenommen, Dienst A registriert neue Benutzer in der Anwendung. Es wird also ein "" UserRegistered "-Ereignis gesendet. Service B nimmt dieses Ereignis auf und verarbeitet es. Einige Entwickler im Team von Service C haben jedoch entschieden, dass sie auch das Geschlecht eines registrierten Benutzers benötigen. Daher wird das Ereignis geändert und das Attribut gender wird dem Ereignis "UserRegistered" hinzugefügt.
Wie können wir sicherstellen, dass Service B immer noch dasselbe Ereignis mit diesem zusätzlichen Attribut erfassen kann, ohne es erneut bereitzustellen?
Und gibt es andere Möglichkeiten, um dieses Problem anzugehen, als diese Ereignisse zu versionieren?