首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法重放日期范围内的事件?

问有没有办法重放日期范围内的事件?
EN

Stack Overflow用户
提问于 2019-05-10 17:11:29
回答 1查看 355关注 0票数 1

我正在实现一个spring-boot和axon的例子。我有两个事件(存入和提取帐户余额)。我想知道有没有办法在给定日期之前获得帐户汇总的状态?我不仅想要得到最终状态,还想要在一系列日期内重播事件。

EN

回答 1

Stack Overflow用户

发布于 2019-05-10 17:30:53

我想我能帮上忙。

在Axon Framework的上下文中,您可以通过告诉给定的TrackingEventProcessor“重置”它的令牌来开始事件的重播。顺便说一下,参考指南中对此的最新描述可以在here中找到。

这些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设置中的命令模型,从而处理进入系统的命令。在大多数应用程序中,您希望命令(例如,更改某些内容的请求)发生在应用程序的current状态上。因此,提供用于检索聚合的Repository不允许指定时间点。

因此,上述关于重放的解决方案仅与查询模型创建相关,因为TrackingEventProcessor是应用程序中最常用于创建视图的事件处理端的一部分。这个想法也与您的问题联系在一起,即您想知道给定时间点的“帐户聚合状态”。这不是一个命令,而是一个查询,因为你有一个“数据请求”,而不是“更改状态的请求”。

希望这篇文章能帮到你@Safe!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56074332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档