首页 > 解决方案 > 在一个命令处理程序中使用多个聚合

问题描述

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

那么,如何在一个命令处理程序中检查 2 个聚合的条件?那么,我是否以错误的方式使用它?

标签: axon

解决方案


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

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

简而言之:一个命令总是由一个聚合/实体处理。对于聚合之间的协调操作,我建议看一下 Saga。


推荐阅读