Axon Framework 从 domain_event_entry table 读取所有事件,而不是序列化其中的有效负载

Axon Framework read all events from domain_event_entry table, and not to serialize payload in it

我正在使用没有 Axon Server 的 Axon Framework 和 Spring 启动自动配置。 我有一个 H2 数据库,使用 Spring 自动配置。

好像EventStore API 只提供了EventStore#readEvents(String aggregateId) 方法,读取特定聚合的所有事件。 但是,我想阅读所有聚合的所有事件。

我怎样才能做到这一点?

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

谢谢。

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

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

不过请注意,我通常建议不要直接查询 EventStore。 Axon 提供了一种非常好的基于注释的方法来处理事件,通过在事件处理程序中起草一个 @EventHandler 注释方法 class 你注册到商店(使用 [=56 时自动为你完成的事情) =] 启动自动配置).

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

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

在这段代码中,我表演了一些小把戏。 Axon 将默认为所述事件的最具体实现提供一个事件。 由于 Java 中的所有内容都实现了 Object,只需要一个事件处理程序,其中第一个参数(请注意,第一个参数总是 always 事件有效负载)的类型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!