Использование нескольких агрегатов в одном обработчике команд

При условии, что у меня есть 2 агрегата, order и customer, и OrderPayCommand в обработчике, он проверит статус заказа и проверит баланс клиента. Если все выполнится успешно, он отправит событие OrderPaidEvent, которое будет обработано агрегатом клиента для обновления баланса.

Итак, как я могу проверить условие для 2 агрегатов в одном обработчике команд? Итак, я использую это неправильно?

1 ответ

Решение

В рамках Axon Framework команда может обрабатываться только одним @CommandHandler аннотированная функция. Таким образом, только один Агрегат будет отвечать за это действие.

Если вы координируете действия между несколькими агрегатами, это обычно означает, что вы можете использовать Saga, Сага в Axon будет иметь ассоциации с несколькими агрегатами, что позволит вам прослушивать события из всех этих агрегатов и давать им команды. Таким образом, это позволяет вам обрабатывать определенные события, такие как OrderPaidEvent например, и после обработки этого в вашей саге вы можете выпустить AdjustCustomerBalanceCommand к Customer совокупность вы связаны с.

Вкратце: команда всегда обрабатывается только одним Агрегатом / Сущностью. Для организации действий между агрегатами, я бы посоветовал взглянуть на Saga.

Другие вопросы по тегам