如何处理在命令后分配 ID 的聚合命令?

How to handle commands for aggregates with IDs assigned after command?

我知道考虑到 Axon 的工作方式,主题行没有意义,但这是我的问题:

我需要创建一个新的聚合实例,"Quote",它绑定到后端记录系统。也就是说,聚合 ID 最终必须与后端系统中分配的 ID 匹配。

因此,我的 uiServer 应用正在调用 commandGateway 并向其发送 CreateQuoteCmd,但我不知道要传递什么作为目标聚合 ID,因为该 ID 将来自命令处理程序调用的后端系统。 uiServer 无法分配 quoteId。 CreateQuoteCmd 的命令处理程序联系我们的后端系统以获取新的 quoteId。后端系统还提供了几个默认值,这些值将放在聚合中。

那么,如何使该 quoteId 成为聚合的 ID?

我在命令对象中将什么作为目标聚合 ID 传递?

我必须在 CreateQuoteCmd 中传递目标聚合 ID,而不是让对象在与后端系统通信后在命令处理程序中设置自己的 ID,这是真的吗? 感谢您的帮助。

您需要在发送命令之前从外部系统获取聚合ID(在域或应用服务层)

将创建聚合的命令不倾向于具有 @TargetAggregateIdentifier 注释字段。这是因为 'target aggregate identifier' 字段不能指向现有聚合,因为该命令将是聚合的起点。

聚合标识符的创建可能发生在您系统中的多个位置,这完全取决于您。

这里的重要部分是聚合中的 @CommandHandler 注释构造函数有一个 return 值,这是您分配给该聚合的聚合标识符。

因此,您应该在发送 CreateQuoteCmd 时处理 CommandGateway/CommandBus 给您的结果。这应该包含您分配给您的(我假设)Quote 聚合的 QuoteId