我们正在使用CQRS,并使用Axon 4使用事件源。
我们有以下情况。
领域书
行动-使用Axon CRQS和事件源流程将新书创建到数据库中(命令-汇总-事件)
行动-使用Axon CRQS和事件源流将已创建的Book更新到数据库中(命令-聚合-事件)
在Axon事件存储中,上面说明的这两个命令(createCommand和updateCommand)具有相同的“ aggregateIdentifier” ID,它们位于同一聚合树中,因为我们正在同一聚合根上工作。
在Axon事件存储中,此命令具有不同的“ aggregateSequenceNumber”,这也是正常现象和预期结果
至此,我们正在通过processingGroup进行重放事件,并且效果很好,现在我们想对事件进行更复杂的重放
题
我们如何创建只重播带有“ aggregateIdentifier” id(一棵聚合树)的事件的resetTokens,这意味着我们只想重播与某本书(聚合树)有关的事件,而不是所有图书?
Axon 4支持此功能吗?
最佳答案
您可以根据需要使用Axon创建此功能,但是它需要使用Axon Framework特定项的一些自定义代码。
首先,这不是重播,因为从事件处理器级别描述了重播。重播事件处理器将基于给定令牌从某个时间点开始读取整个事件流。
您想要的是重放和过滤给定的聚合标识符。
从注释中的描述来看,这感觉像是用户/服务针对您的应用程序进行的零星查询。
处理此查询后,您将需要打开事件流,过滤事件,然后使用剩余的流更新所需的查询模型。
从实现的角度来看,我将使用AnnotationEventHandlerAdapter
。此类应指定为annotated event listener
,该类型应为您要临时创建并返回的查询模型。
随后,应使用过滤后的事件流调用AnnotationEventHandlerAdapter#handle(EventMessage<?>)
方法。到达流的末尾后,您的查询模型就是最新的。
因此,请转回到您的问题:
Axon 4支持此功能吗?
答案是肯定的,但是这需要您的一些手工工作。