Подскажите best practice использования Event Driven Architecture.
Опишу ситуацию: существует множество микросервисов, потребляющие ивенты из одной, цетральной, монолит системы. Каждый МС испольняет свою задачу и требует, соответственно, свой набор данных. Полным набором данных владеет только монолит.
Вопрос: каким образом доставлять в МС необходимые данные:
1) расширять каждый раз payload для ивента, чтобы удовлетворить потребность в каких-то полях для МС
2) генерировать разные ивенты, с разным набором данных, т.е. каждый МС использует определенный ивент префикс.?
3) все МС получают один ивент и недостающие
данные дотягивают по API у монолита?
Последний вариант самый адекватный, как по мне. правильно ли это, с точки зрения идеологии EDD?
Поделитесь, пожалуйста, опытом.
Все зависит от жизненного цикла данных. Надо понимать что событийная система не обязана отрабатывать в режиме реального времени. Для некоторых случаев необходимо расширять payload, а для каких-то наоборот. Например, если у вас микросервис создаёт заказ на основе запроса пользователя то логично в payload отправить запрос пользователя, а если микросервис прогревает кэш, то логично выдать минимум данных чтобы остальное взять из базы. И в обоих случаях, скорее всего, на самом деле, будет комбинация