gpt4 book ai didi

java - Axon框架从domain_event_entry表中读取所有事件,而不是序列化其中的有效负载

转载 作者:行者123 更新时间:2023-11-30 01:46:27 31 4
gpt4 key购买 nike

我使用的 Axon 框架没有 Axon 服务器,但带有 Spring Boot 自动配置。我有一个 H2 数据库,使用 Spring 自动配置。

EventStore API 似乎只提供 EventStore#readEvents(StringaggregateId) 方法来读取特定聚合的所有事件。但是,我想阅读所有聚合的所有事件。

我怎样才能实现这个目标?

其次,我不想序列化有效负载中的数据,我想将其存储在 JSON 中,我该怎么做?

谢谢。

最佳答案

EventStore 接口(interface)本身确实只包含读取给定聚合事件的方法。然而,该接口(interface)实现了 StreamableMessageSource 接口(interface)(您可以找到 here )。

通过此接口(interface),EventStore 为您提供 openStream(TrackingToken) 方法。 TrackingToken 指定您要在流中的哪个点开始。作为捷径,如果您提供 null 作为 TrackingToken,流将在时间开始时打开(当然对于所述事件流)。

但请注意,我通常建议不要直接查询 EventStore。Axon 提供了一种基于注释的完美方法来处理事件,通过在您注册到存储的事件处理程序类中起草一个 @EventHandler 带注释的方法(当使用 Spring Boot auto 时,该方法会自动为您完成)配置)。

作为读取单个事件处理函数中的所有事件的简写,您可以执行以下操作:

@EventHandler
public void on(Object event) {
// Perform event handling logic
}

在这个片段中,我表演了一些技巧。默认情况下,Axon 将向所述事件的最具体实现提供一个事件。由于 Java 中的所有内容都实现了 Object,因此只需拥有一个事件处理程序,其中第一个参数(请注意,第一个参数始终是事件负载)的类型为 Object 就可以了。

<小时/>

现在,对于您发布的最后一个问题(我建议将来为此提出单独的问题,以继续关注 Stack Overflow):

And secondly, I don't want to serialize the data in the payload, I want to store it in JSON, how can I do that?

您的意思是想在事件处理程序中将事件作为 JSON 进行处理吗?或者,您想直接从 EventStore 检索 JSON 流?请注意,不可能按原样存储对象,因此序列化将始终发生。

如果它禁用反序列化,那么我可以告诉您,您必须为此自行查询实际数据库,或者大量自定义 EventStorageEngine (存储引擎就是 EventStore 用于从数据库检索事件)。AxonIQ 团队正在考虑添加这样的功能,但我可以向您保证,这尚未实现。

希望这能澄清您的选择@polosoft!

关于java - Axon框架从domain_event_entry表中读取所有事件,而不是序列化其中的有效负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57753438/

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