有什么方法可以在日期范围内重播事件



我正在实现弹簧靴和轴突的示例。我有两个事件(存入和提取帐户余额(。我想知道有什么方法可以在给定日期之前将帐户状态汇总?我不仅要获得最终状态,而且要在一系列日期中重播事件。

我想我可以为此提供帮助。

在轴突框架的上下文中,您可以通过告诉给定的TrackingEventProcessor"重置"它是令牌来开始事件的重播。顺便说一句,可以在此处找到参考指南中的当前描述。

这些TrackingTokens是知道给定TrackingEventProcessor在处理事件流的事件方面有多远的对象。因此,重置/调整这些TrackingTokens是会发出事件的重播。

知道所有这些,第二步是查看TrackingEventProcessor提供给"重置令牌"的方法,这是三倍:

  1. TrackingEventProcessor#resetTokens()
  2. TrackingEventProcessor#resetTokens(Function<StreamableMessageSource, TrackingToken>)
  3. TrackingEventProcessor#resetTokens(TrackingToken)

选项一个人将使您的令牌重置为事件流的开头,从而重播所有内容。选项第二和第三,但是让您有机会提供TrackingToken

因此,您可以从事件流上的几个点开始提供TrackingToken。那么,您如何在特定时间点创建这样的TrackingToken?为此,您应该查看具有以下操作的StreamableMessageSource接口:

  1. StreamableMessageSource#createTailToken()
  2. StreamableMessageSource#createHeadToken()
  3. StreamableMessageSource#createTokenAt(Instant)
  4. StreamableMessageSource#createTokenSince(Duration)

选项1是在流开始时创建令牌的,而2将在流的头部创建一个令牌。

选项3和4将允许您在特定时间点创建令牌,从而使您可以重播所有事件,因为已定义的实例到现在为止。

但是,在这种情况下有一个警告。您要重播总体。从Axon的角度来看,默认情况下,汇总是设置CQRS中的命令模型,因此处理进入系统的命令。在大多数应用程序中,您需要在应用程序的当前状态上发生命令(例如,更改某些内容的请求(。因此,提供的Repository用于检索聚合物不允许指定时间点。

因此,以上所述的重播解决方案仅与查询模型的创建有关,因为TrackingEventProcessor是您应用程序中事件处理方面的一部分,最常用于创建视图。这个想法也与您的问题联系在一起,您想在给定的时间点了解"汇总状态"。那不是命令,而是a query ,因为您有" data请求"而不是"更改状态的请求"。

希望这可以帮助您@SAFE!

最新更新