DDD Микросервис Сохранение обновленных служебных данных - PullRequest
0 голосов
/ 17 июня 2020

У меня есть услуга продукта, услуга категории, услуга продвижения, услуга поиска.

Когда пользователь хочет добавить продукт. CreateProductRequest переходит в сервисное обслуживание продукта. Запрос включает данные о продуктах и ​​другие услуги, такие как categoryId, а также нерасчетную цену. После добавления продукта. Мне нужно отправить другие данные серв ie. Сервису категории нужны productId и CategoryId. Сервису рекламных акций нужны productId и цена.

После того, как транзакция создана, транзакция завершена;

1) Я помещаю все данные в ProductCreatedEvent, включая сохраненный productId, categoryId, невычисленную цену и т. Д. c. Каждая служба получает от события то, что ему нужно, и сохраняет в своей базе данных. Я публикую sh событие с помощью RabbitMQ

2) Отправляю через отдельные команды службам. Я отправляю команды с RabbitMQ

И что, если нет категории, идентификатор которой поставляется с событием, а службы категорий не Спасаю. Но продукт сохранен в сервисах продукта?

или что вы предлагаете?

1 Ответ

0 голосов
/ 18 июня 2020

Чтобы ответить на вопрос, важно помнить о различии между командой и событием. Команда - это просьба что-то сделать. Событие - это запись того, что произошло. Одно из ключевых отличий состоит в том, что команду можно отклонить.

При рассмотрении вашего варианта использования публикация событий в другие службы имеет наибольший смысл. Продукт создан, и вы уведомляете другие ограниченные контексты, которые заботятся об изменении. Если вы вводите команду, вы сообщаете другому ограниченному контексту, что нужно внести изменения, которые могут потерпеть неудачу, а могут и нет.

Тем не менее, каждый ограниченный контекст может получить событие и создать команду в своем собственном контексте для обновления агрегатов, управляемых внутри. Таким образом, разница между этими двумя невелика: - Выдача команды каждому ограниченному контексту - Выдача события каждому ограниченному контексту, и они затем могут запускать команду по мере необходимости

Но, учитывая вышесказанное, уведомление создание продукта не должно провалиться. Это уже произошло. Оттуда каждый контекст может решить, что с этим делать.

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