在一个命令处理程序中使用多个聚合

Using multiple aggregate in one command handler

假设我有 2 个聚合,订单和客户,以及一个 OrderPayCommand,在处理程序中,它将检查订单状态,并检查客户余额。如果全部成功,它将发送一个事件 OrderPaidEvent,该事件将由 Customer 聚合处理以更新余额。

那么,如何在一个命令处理程序中检查 2 个聚合的条件?那么,我是不是用错了?

在 Axon 框架内,一个命令只能由一个 @CommandHandler 注释函数处理。因此,只有一个聚合将负责处理该操作。

如果您要在多个聚合之间编排操作,这通常意味着您可以使用 Saga。 Axon 中的 Saga 将关联到多个聚合,这使您能够侦听来自所有这些聚合的事件并向它们发出命令。 因此,这使您能够处理某些事件,例如 OrderPaidEvent,并且在您的 Saga 中处理该事件后,您可以向关联的 Customer 聚合发出 AdjustCustomerBalanceCommand

简而言之:一个命令总是由一个 Aggregate/Entity处理。对于聚合之间的编排操作,我建议看一下 Saga。