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

时间:2019-03-26 18:23:51

标签: axon

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

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

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

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

作为目标对象中的命令集合ID传递什么?

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

2 个答案:

答案 0 :(得分:2)

将要创建聚合的命令不倾向于具有@TargetAggregateIdentifier注释字段。之所以如此,是因为该字段是“目标聚合标识符”,不能指向现有的聚合,因为该命令将是聚合的起点。

创建聚合标识符可能会在系统中的多个点发生,并且完全取决于您。

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

因此,在分派CommandGateway时,应该处理CommandBus / CreateQuoteCmd给您的结果。这应该包含您已分配给QuoteId聚合的Quote

答案 1 :(得分:0)

您需要先从外部系统获取聚合ID,然后再发送命令(在域或应用程序服务层)