Axon - Синхронная сага / Проверка команд - Уникальность

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

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

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

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

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

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

Спасибо.


person Marcelo M. Gonçalves    schedule 12.04.2020    source источник


Ответы (1)


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

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

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

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

person Ivan Dugalic    schedule 12.04.2020
comment
Спасибо, Иван. Я хотел бы использовать вариант 4 (из упомянутой статьи), и там (вариант схемы последовательности 4) обработчик команд дождется завершения саги. Используя команды Axon от контроллеров, поток возвращается, как только выполняются обработчик команд и обработчик событий (и отправляется команда успешного выполнения HTTP 200 OK вызывающей стороне клиентского API). В этом случае выполнение SAGA происходит синхронно (обработчик команд, описанный в статье (диаграмма последовательности), может не иметь смысла в этом контексте. Верно?). Как мне настроить эту опцию (4) с помощью Axon? (если возможно) - person Marcelo M. Gonçalves; 12.04.2020
comment
Привет, Иван. Какая-то идея? Вы, Аллард, Стивен или, может быть, Милан Савич, кто-то из команды Axon. Как реализовать вариант 4 из статьи с помощью Axon. Спасибо - person Marcelo M. Gonçalves; 13.04.2020