Тело модели обновлено событие - PullRequest
0 голосов
/ 04 марта 2019

Давайте представим, что у нас есть пользовательский объект, и мы хотим синхронизировать состояние этого объекта через сервис-ориентированную архитектуру, используя события.Что касается события, которое отправляется при изменении пользователя, мне было интересно, какой из этих параметров будет лучше для тела события:

  1. Отправка только полей, которые были изменены.
  2. Отправка всех полей в пользовательском объекте, оставляя у подписчика ответственность за проверку того, какие поля претерпели какие-либо изменения.

В примере, о котором я думаю, было бы целесообразно следующееСценарий:

  1. В службе A поле profile пользователя обновляется, и в теме user-updated отправляется событие
  2. Служба B, на которую подписанэтот раздел обновляет информацию о пользователе, и в результате этого обновления поле contact-email этого пользователя изменяется.Учитывая, что состояние пользователя изменилось, в ту же тему отправляется событие.
  3. Служба A, которая также подписана на эту тему, получает событие и локально обновляет поле contact-email пользователя,Учитывая, что состояние пользователя изменилось, событие отправляется в ту же тему.
  4. Служба B получает последнее событие, в котором изменилось только contact-email, и пытается обновить пользователя.Поскольку между существующей пользовательской информацией и полученной пользовательской информацией не происходит никаких изменений, состояние не изменяется, и дальнейшее событие в теме user-updated не отправляется.

Этот процесс кажется мне довольно сложным дажехотя есть только 2 службы, отслеживающие состояние пользователя.В реальном примере количество таких услуг может быть намного выше.

1 Ответ

0 голосов
/ 04 марта 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...