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!
我正在使用没有 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!