我们正在使用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支持此功能吗?


答案是肯定的,但是这需要您的一些手工工作。

10-08 11:20