Перейти к содержанию

Создание оркестратора повествования

Методы, такие как OrderService.CreateOrder() делают две вещи: создают или обновляют агрегат и создают оркестратор повествований. Сервис должен выполнять эти действия так, чтобы второе гарантированно завершалось в случае успешного выполнения первого. Реализация этого зависит от используемого типа хранилища.

Создание оркестратора повествований с помощью хранилища событий на основе реляционной БД

Если сервис использует хранилище событий на основе реляционной БД, он может обновить и создать оркестратор в рамках одной ACID транзакции.

Создание оркестратора при использовании хранилища событий NoSQL

Сервис, применяющий хранилище NoSQL, скорее всего, не сможет атомарно обновить его и создать оркестратор повествований. Вместо этого у сервиса должен быть обработчик, который создает оркестратор в ответ на доменное событие, сгенерированное агрегатом. Например:
Pasted image 20211001201816.png
При написании обработчика, создающего оркестратор, следует помнить, что он должен справляться с повторяющимися сообщениями. Важно, чтобы повествование создавалось в единственном экземпляре.
Для этого нужно формировать идентификатор повествования на основе уникального атрибута события.
Один из вариантов — использовать ID агрегата, который генерирует событие. Это хорошо подходит для повествований, создающихся в ответ на генерацию событий со стороны агрегата.
Другой вариант — воспользоваться ID события. Поскольку эти ID уникальные, это гарантирует уникальность ID повествования.
Сервис на основе реляционной БД тоже может применять этот подход к созданию повествований. Его преимущество — в слабом связывании.


Последнее обновление : 25 мая 2023 г.
Дата создания : 29 июля 2022 г.

Комментарии

Комментарии