axon - 在一个命令处理程序中使用多个聚合
问题描述
假设我有 2 个聚合,订单和客户,以及一个 OrderPayCommand,在处理程序中,它将检查订单状态,并检查客户余额。如果全部成功,它将发送一个事件 OrderPaidEvent,该事件将由 Customer 聚合处理以更新余额。
那么,如何在一个命令处理程序中检查 2 个聚合的条件?那么,我是否以错误的方式使用它?
解决方案
在 Axon 框架内,命令只能由一个带@CommandHandler
注释的函数处理。因此,只有一个聚合将负责处理该操作。
如果您在多个聚合之间编排操作,这通常意味着您可以使用Saga
. Axon 中的 Saga 将与多个聚合关联,这使您能够侦听来自所有这些聚合的事件并向它们发出命令。因此,这使您能够处理某些事件OrderPaidEvent
,例如,并且在您的 Saga 中处理这些事件时,您可以AdjustCustomerBalanceCommand
向Customer
关联的聚合发出一个。
简而言之:一个命令总是由一个聚合/实体处理。对于聚合之间的协调操作,我建议看一下 Saga。
推荐阅读
- python - 合并大型 h5 数据集
- hbase - HBase 或 Azure 日志分析
- c++ - 错误:std::thread 参数在转换为右值后必须是可调用的
- ios - 如何构建一个基于行状态不同的 iOS 可滑动 UIContextualAction
- c# - 仅使用 .Net 生成证书请求并提交给 CA
- python - 将用字符写入的 Python 列表读入 R
- reactjs - 如何显示用户在我的应用上在线的时间。“大卫,在线 12 分钟”
- javascript - 如何从列表拖放到特定的表格单元格
- python - Windows 10 - 在 Python 中获取当前播放歌曲的进度
- r - 在 arulesCBA 中获取第一列作为类属性