在一个命令处理程序中使用多个聚合
Using multiple aggregate in one command handler
假设我有 2 个聚合,订单和客户,以及一个 OrderPayCommand,在处理程序中,它将检查订单状态,并检查客户余额。如果全部成功,它将发送一个事件 OrderPaidEvent,该事件将由 Customer 聚合处理以更新余额。
那么,如何在一个命令处理程序中检查 2 个聚合的条件?那么,我是不是用错了?
在 Axon 框架内,一个命令只能由一个 @CommandHandler
注释函数处理。因此,只有一个聚合将负责处理该操作。
如果您要在多个聚合之间编排操作,这通常意味着您可以使用 Saga
。 Axon 中的 Saga 将关联到多个聚合,这使您能够侦听来自所有这些聚合的事件并向它们发出命令。
因此,这使您能够处理某些事件,例如 OrderPaidEvent
,并且在您的 Saga 中处理该事件后,您可以向关联的 Customer
聚合发出 AdjustCustomerBalanceCommand
。
简而言之:一个命令总是由一个 Aggregate/Entity处理。对于聚合之间的编排操作,我建议看一下 Saga。
假设我有 2 个聚合,订单和客户,以及一个 OrderPayCommand,在处理程序中,它将检查订单状态,并检查客户余额。如果全部成功,它将发送一个事件 OrderPaidEvent,该事件将由 Customer 聚合处理以更新余额。
那么,如何在一个命令处理程序中检查 2 个聚合的条件?那么,我是不是用错了?
在 Axon 框架内,一个命令只能由一个 @CommandHandler
注释函数处理。因此,只有一个聚合将负责处理该操作。
如果您要在多个聚合之间编排操作,这通常意味着您可以使用 Saga
。 Axon 中的 Saga 将关联到多个聚合,这使您能够侦听来自所有这些聚合的事件并向它们发出命令。
因此,这使您能够处理某些事件,例如 OrderPaidEvent
,并且在您的 Saga 中处理该事件后,您可以向关联的 Customer
聚合发出 AdjustCustomerBalanceCommand
。
简而言之:一个命令总是由一个 Aggregate/Entity处理。对于聚合之间的编排操作,我建议看一下 Saga。