Я занимаюсь исследовательским проектом, в котором изучаю варианты обработки изменений в микросервисной архитектуре, управляемой событиями.
Итак, скажем, у нас есть приложение, в котором мы получили четыре разных сервиса. Каждый из этих сервисов имеет собственную базу данных для хранения локальных данных.
В этой настройке четыре службы обмениваются данными друг с другом с помощью шины событий. Поэтому, когда что-то происходит в сервисе, оно публикует событие. Все остальные сервисы, которые заинтересованы в этом событии, будут обрабатывать его по-своему.
В этом случае различные сервисы в архитектуре должны иметь «контракты» относительно содержания этих событий (атрибутов и т. Д.). Так что сервисы имеют «слабо связанные зависимости» от этих событий
Мой вопрос: как мы можем справиться с изменениями в этих событиях?
Итак, скажем, служба A регистрирует новых пользователей в приложении. Поэтому он отправляет событие «UserRegistered». Служба B получает это событие и обрабатывает его. Но некоторые разработчики из команды службы C решили, что им также нужен пол зарегистрированного пользователя. Таким образом, событие изменилось и пол атрибута добавляется в событие «UserRegistered».
Как мы можем быть уверены, что Служба B все еще может получить одно и то же событие с этим дополнительным атрибутом без повторного развертывания?
И есть ли другие способы решения этой проблемы, кроме создания версий этих событий?