2015-04-14 2 views
1

Я разрабатываю систему на основе событий, которая включает в себя две службы: A и B.Автобус сообщений и события - как реагировать?

Когда пользователь обновляет ресурс в службе A, используя PUT, эта служба отправит уведомление в очередь сообщений. Служба B считывает из этой очереди, а затем необходимо обновить состояние одного из своих ресурсов на основе изменений, которые произошли на ресурс в А.

Как я понимаю, есть два способа справиться с этим:

  1. Сообщение, которое служба A посылает, содержит поле с измененным ресурсом и с чем оно изменилось. Когда служба B потребляет это сообщение, она использует эту информацию для определения состояния своего ресурса.
  2. Сообщение, которое отправляет служба A, содержит только ссылку на измененный ресурс. Когда служба B потребляет это сообщение, она вызывает эту ссылку для извлечения текущего состояния ресурса A для собственной обработки.

Какой метод вы все находите более приятным? Я склоняюсь к # 1 из-за получателя сообщения, не нуждающегося в возможности иметь внеполосное знание службы B (да, у него есть ссылка, но у нее могут быть неправильные заголовки, правильный HTTP-глагол и т. Д.), и уменьшить количество слухов.

Любые идеи были бы оценены!

ответ

1

Оба варианта являются жизнеспособными. Какую версию вы выбираете, зависит от нескольких вещей.

  • Как дорого искать ресурс? Если это дорого, то наклонитесь к Варианту 1.
  • Насколько дорого стоит отправить изменение в очереди? Вариант 1 отправляет diff, и если этот diff большой, это может стать дорогостоящим. Вариант 2 отправляет ссылку на ресурс. Третий вариант: store the diff as a resource.
  • Может ли система иметь дело с несколькими изменениями ресурса? Например, ресурс может меняться несколько раз между тем временем, когда A отправляет уведомление, а система B считывает ресурс. Если система может справиться с этим, Вариант 2 имеет возможность игнорировать некоторые обновления, что потенциально может сократить обработку. Если система не справляется с этим, вы должны использовать опцию 1.
Смежные вопросы