Является ли хорошей практикой отправлять команды с одного микросервиса на другой?Или лучше иметь в микросервисе B обработчик событий, который реагирует на события из службы A и генерирует все команды в микросервисе B?
Важная вещь, которую необходимо распознать в архитектуре сервиса: мы хотимуслуги должны быть автономными.Таким образом, A
должен продолжать работать, пока B
отключен для обслуживания, и наоборот.
Это означает, что нам необходимо поддерживать асинхронный обмен сообщениями от A до B.
Текущий "лучший метод«если вы имеете дело с сообщениями, доставляемыми асинхронно, то семантика должна быть в прошедшем времени: SomethingHappened
в A
, и B
будет реагировать на нее или нет, в свое время по своему усмотрению.
Имеет ли это значение?Трудно сказать - handle(Event)
- это команда , CommandReceived
- это событие .
Примечание: на самом деле это просто службы и обмен сообщениями - Event-Sourcing / CQRS действительно не входит в него.
Мартин Фаулер описал доменные события в 2005 году.
Каждое доменное событие собирает информацию от внешнего стимула.
Если вы думаете о A
как о external to B
(что имеет смысл, если между ними есть границы служб), то семантика события доменашаблон может быть очень хорошо подходит.