Robię projekt badawczy, w którym badam opcje obsługi zmian w architekturze mikrousług opartej na zdarzeniach.
Powiedzmy, że mamy aplikację, w której mamy cztery różne usługi. Każda z tych usług ma własną bazę danych do przechowywania danych lokalnych.
W tej konfiguracji cztery usługi komunikują się ze sobą za pomocą magistrali zdarzeń. Kiedy więc coś się dzieje w serwisie, publikuje wydarzenie. Wszystkie inne usługi zainteresowane tym wydarzeniem przetwarzają je na swój własny sposób.
W takim przypadku różne usługi w architekturze muszą mieć „kontrakty” dotyczące treści tych zdarzeń (atrybuty itp.). Usługi mają więc „luźno powiązane zależności” od tych zdarzeń
Moje pytanie brzmi: jak poradzić sobie ze zmianami tych wydarzeń?
Powiedzmy, że usługa A rejestruje nowych użytkowników w aplikacji. Wysyła więc zdarzenie „Zarejestrowane przez użytkownika”. Usługa B odbiera to zdarzenie i przetwarza je. Jednak niektórzy programiści z zespołu usługi C zdecydowali, że potrzebują również płci zarejestrowanego użytkownika. Zdarzenie zostało zmienione, a atrybut płci jest dodawany do zdarzenia „UserRegistered”.
W jaki sposób możemy upewnić się, że usługa B może nadal odbierać to samo zdarzenie z tym dodatkowym atrybutem bez ponownego wdrażania?
Czy istnieją inne sposoby podejścia do tego problemu niż wersjonowanie tych zdarzeń?