gpt4 book ai didi

java - Axon - 在查询时进行投影的最简单方法

转载 作者:行者123 更新时间:2023-12-02 09:51:00 26 4
gpt4 key购买 nike

我通常每个聚合有 5-6 个事件,并且不希望将预测存储在数据库中。在查询时进行 View 投影的最简单方法是什么?

最佳答案

对此的简短回答是,没有简单/快速的方法可以做到这一点。

但是,实现“在请求时重放给定事件”设置肯定是可行的。

我建议你做的事情分为几个步骤:

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

所以,我再说一遍,我不认为这设置起来过于琐碎、简单或快速。此外,步骤 3 有一个警告。基于聚合标识符检索给定聚合的流非常快速/简洁,因为聚合通常没有很多事件。

但是,根据 TrackingToken 检索事件流如果您的查询模型跨越多个聚合,您将需要它,它可以确保您拉入整个事件存储以动态实例化您的模型。当然,您可以在处理 TrackingToken 时微调希望事件流返回事件的时间点。 ,但变化相当大,您将不完整且相对较慢。

但是,您表示希望检索给定聚合标识符的事件。因此,我认为这在您的场景中应该是一个可行的解决方案。

希望这有帮助!

关于java - Axon - 在查询时进行投影的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56323331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com