Axon - синхронная сага / проверка команд - уникальность - PullRequest
0 голосов
/ 12 апреля 2020

Я хотел бы создать синхронный сага-процесс из команды sendAndWait на REST-контроллере в @Endsaga (включая средние шаги).

@Endsaga будет доступен только после отправки на стороне запроса (отдельный проект) событие (успех или неудача на стороне запроса чтения из хранилища), информирующее Saga о том, что произошло.

Это часть процесса проверки уникальности почтового клиента с использованием шаблона саги, описанного по ссылке ниже:

http://foreverframe.net/how-to-guarantee-username-uniqueness-with-cqrses/

Я не уверен, как правильно настроить эту конфигурацию в Axon.

Вы можете мне помочь?

Спасибо.

1 Ответ

1 голос
/ 12 апреля 2020

Мое личное мнение, что вариант 2 (из статьи, которую вы упомянули) является наиболее прагматичным c. Я не согласен с cons, упомянутым для DB на стороне команд.

Для проверки уникальности я бы использовал небольшую проекцию на стороне команды (в компоненте / пакете команды). В Axon это будет обычный обработчик событий, который будет обрабатывать события и заполнять небольшую таблицу денормализованным способом, чтобы вы могли использовать его для проверки уникальности в последнем обработчике команд. Этот обработчик / обработчик событий должен иметь тип Подписка (https://docs.axoniq.io/reference-guide/configuring-infrastructure-components/event-processing/event-processors#event -процессоры )

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

  2. Не открывайте API запросов Axon поверх этого репозитория (проекция), просто внедрите этот репозиторий в ваши обработчики агрегатов, чтобы проверить уникальность. Таким образом, API-интерфейс проекции будет доступен только вашему командному компоненту, чтобы использовать его и не подвергаться воздействию внешнего мира.

...