robinzonejob
@robinzonejob
разработчик .NET

Какие есть лучшие практики обновления моделей через брокер сообщений?

Недавно начал изучать микросервисный подход в создании распределенных систем, брокер RabbitMQ и библиотеку MassTransit для более высокоуровневого взаимодействия с шиной из под .NET Core.
Читая в интернете множество статей, часто натыкаюсь, что в сообщения, которыми между собой общаются микросервисы, часто кладут DTO той сущности, к которой имеет отношение некоторое наступившее событие.
Например, при изменении суммы в счете клиента, будет запаблишено сообщение AcoountChanged внутри которого будет лежать AccountDTO c актуальным срезом данных необходимой модели. Ну, а в других сервисах, где нужно, будет зарегистрирован Consumer потребляющий тип AcoountChanged. Соответственно на стороне потребителя я просто возьму данные из AccountDTO и заменю ими те, что лежат у него в базе. НО (собственно перехожу к сути вопроса) если по какой-то причине у меня есть два микросервиса, которые меняют информацию о счете клиента, и оба эти микросервиса паблишат периодически сообщение типа AcoountChanged, однако первый из них может полностью заполнить AcoountDTO, а второй не обладает полным набором данных о счете клиента, и скажем в некоторых полях он просто оставляет NULL, то на стороне потребителя мы не можем понять - этот NULL - значит, что значение изменилось на NULL и нам нужно взять его и проставить у себя в базе, или этот NULL означает что просто микросервис отправивший это сообщение ничего не знает про конкретно это поле и его не изменял...
Да, можно было бы, конечно, для подобных ситуаций вводить различие, например, по неймспейсам, и для каждого микросервиса делать свой тип сообщения AcoountChanged, чтобы как-то специальным образом их потом обрабатывать на стороне потребителя, но на мой взгляд это противоречит постулату о том, что каждый микросервис ничего не должен знать о других.
Надеюсь я не очень сумбурно обрисовал суть вопроса, над которым сейчас размышляю, а именно - каким образом лучше организовать и обрабатывать подобные ситуации.
Заранее спасибо и извиняюсь за многобуков.
  • Вопрос задан
  • 206 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы