【发布时间】:2019-05-27 09:32:24
【问题描述】:
我通常每个聚合有 5-6 个事件,并且不想将预测存储在 DB 中。在查询时进行视图投影的最简单方法是什么?
【问题讨论】:
标签: java domain-driven-design event-sourcing axon
我通常每个聚合有 5-6 个事件,并且不想将预测存储在 DB 中。在查询时进行视图投影的最简单方法是什么?
【问题讨论】:
标签: java domain-driven-design event-sourcing axon
对此的简短回答是,没有简单/快速的方法可以做到这一点。
但是,实现“在请求时重播给定事件”设置肯定是可行的。
我建议你做的事情有几个步骤:
@EventHandler注解的方法)@QueryHandler 注释方法。EventStore 检索事件流。如果这是基于aggregateIdentifier,请使用EventStore#readEvents(String) 方法。如果需要整个事件流,需要使用StreamableMessageSource#openStream(TrackingToken)方法(注意:EventStore接口实现StreamableMessageSource)AnnotationEventHandlerAdapter,为其提供一个新的查询模型实例AnnotationEventHandlerAdapter#handle(EventMessage) 方法。此方法将调用查询模型对象上的 @EventHandler 注释方法所以,我不认为这是过于琐碎、简单或快速的设置。 此外,第 3 步有很多警告。根据聚合标识符检索给定聚合的流非常快速/简洁,因为聚合通常没有很多事件。
但是,如果您的查询模型跨越多个聚合,您将需要基于 TrackingToken 检索事件流,可以确保您拉入 整个 事件存储以实例化您的模型苍蝇。当然,您可以在处理 TrackingToken 时微调您希望事件流从其返回事件的时间点,但更改非常高,您将不完整且相对缓慢。
但是,您声明要检索给定聚合标识符的事件。 因此,我认为这在您的场景中应该是一个可行的解决方案。
希望这会有所帮助!
【讨论】: