轴突 - 在查询时间进行投影的最简单方法



我通常每汇总有5-6个事件,并且不想将投影存储在DB中。在查询时间进行视图投影的最简单方法是什么?

对此的简短答案是,没有简单/快速的方法。

但是,最肯定的是实现"在请求时间重播给定的事件"。

我建议您做的几个步骤存在:

  1. 创建您要返回的查询模型,该模型可以处理事件(在模型上使用@EventHandler注释方法(
  2. 创建一个可以处理可以返回查询模型的查询的组件(对此使用@QueryHandler注释方法。
  3. 查询处理组件应该能够从EventStore检索事件。如果基于aggregateIdentifier,请使用EventStore#readEvents(String)方法。如果需要整个事件流,则需要使用StreamableMessageSource#openStream(TrackingToken)方法(注意:EventStore接口实现StreamableMessageSource(
  4. 在查询处理时,创建一个AnnotationEventHandlerAdapter,为其提供了查询模型的新实例
  5. 对于您在第3点创建的事件流中的每个事件,请致电AnnotationEventHandlerAdapter#handle(EventMessage)方法。此方法将在查询模型对象上调用@EventHandler注释方法
  6. 如果流耗尽,请确保您的查询模型所处理的所有必要事件。因此,您现在可以返回查询模型

因此,我再次认为这不是过于琐碎,容易或快速设置。此外,步骤3在那里有一个警告。基于汇总标识符检索给定聚合的流非常快/简洁,因为通常没有很多事件。

但是,根据TrackingToken检索事件流,如果查询型号跨越了几个聚合,则可以确保您将整个全事件存储插入即时实例化模型。当然,您可以在处理TrackingToken时将事件流返回事件的时间点,但是更改很高,您将不完整且相对较慢。

但是,您说您想为给定的汇总标识符检索事件。因此,我认为这应该是您方案中的一个可行解决方案。

希望这会有所帮助!

最新更新