Давайте представим, что у нас есть пользовательский объект, и мы хотим синхронизировать состояние этого объекта через сервис-ориентированную архитектуру, используя события. Что касается события, которое отправляется при изменении пользователя, мне было интересно, какой из этих вариантов будет лучше для тела события:
В примере, о котором я думаю, следующий сценарий был бы возможным:
profile пользователя и отправляется событие в теме user-updated событиеcontact-email этого пользователя. Учитывая, что состояние пользователя изменилось, событие отправляется в ту же тему.contact-email пользователя. Учитывая, что состояние пользователя изменилось, событие отправляется в ту же тему.contact-email, и пытается обновить пользователя. Поскольку нет никаких изменений между существующей информацией о пользователе и полученной информацией о пользователе, состояние не изменяется, и никакие дальнейшие события не отправляются в тему user-updated.Этот процесс кажется мне довольно сложным, хотя есть всего 2 сервиса, отслеживающих состояние пользователя. В реальном примере таких сервисов может быть гораздо больше.





Лично я бы отправил только измененные поля, если не что иное, чтобы сохранить небольшую полезную нагрузку сообщения. Большинство систем обмена сообщениями оптимизируют/ограничивают небольшие сообщения и плохо работают, когда вы отправляете больше пары тысяч данных.
Кроме того, я смущен, почему вы делаете здесь репликацию с несколькими мастерами. Почему бы вам не создать единую пользовательскую службу, в которую обе эти службы отправляют обновления, а другие службы извлекают информацию. Вы можете кэшировать данные в клиентских сервисах, и тогда ваше событие может стать истечением срока действия кэша, а не событием репликации данных.