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