Java Axon框架从域\事件\条目表中读取所有事件,而不是序列化其中的负载

Java Axon框架从域\事件\条目表中读取所有事件,而不是序列化其中的负载,java,spring-boot,axon,Java,Spring Boot,Axon,我使用的是没有Axon服务器的Axon框架和Spring Boot自动配置。 我有一个H2数据库,使用Spring自动配置 似乎EventStoreAPI只提供了EventStore#readEvents(stringaggregateId)方法来读取特定聚合的所有事件。 然而,我想从所有的集合中阅读所有事件 我怎样才能做到这一点 其次,我不想序列化有效负载中的数据,我想将其存储在JSON中,我该怎么做 谢谢。事实上,EventStore接口本身只包含读取给定聚合事件的方法。 但是,该接口实现了

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

似乎
EventStore
API只提供了
EventStore#readEvents(stringaggregateId)
方法来读取特定聚合的所有事件。 然而,我想从所有的集合中阅读所有事件

我怎样才能做到这一点

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


谢谢。

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

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

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

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

@EventHandler
上的公共无效(对象事件){
//执行事件处理逻辑
}
在这段代码中,我执行了一些技巧。 默认情况下,Axon将为所述事件的最具体实现提供一个事件。 由于Java中的一切都实现了
对象
,因此只要有一个事件处理程序,其中第一个参数(注意,第一个参数始终是事件负载)的类型为
对象
就可以了


现在,对于您发布的最后一个问题(我建议将来对此单独提问,以保持对堆栈溢出的关注):

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

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

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


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

@polosoft需要什么功能?或者,换言之,如果Axon有一个非常好的基于注释的事件处理程序解决方案,那么直接访问
EventStore
API来检索所有事件的用例是什么?我想在domain\u Event\u entry表中搜索,这就是我不想序列化数据的原因。我知道你想搜索它,我想这就是为什么你首先要问这个问题。但是,你为什么需要搜索它呢?这是我们的客户提出的问题,出于某些原因,他们想知道用户可以在表上看到什么,例如,我今天必须告诉我们的客户,用户可以做什么,然后在2015年看到什么。让他们直接访问数据库难道不起作用吗?无论如何,正如所指出的,这将需要从您的部分定制一些工作。您可以考虑的另一件事是设置Axon服务器。Axon服务器仪表板中的“搜索”窗口以序列化格式开箱即用显示整个事件列表。因此,如果您愿意设置,您将有效地拥有一个“所有事件”的免费视图。亲爱的史蒂文!谢谢你的支持。我将来会有几个关于Sagas的问题,如果你有时间的话,请回答。我正在监测任何与轴突相关的问题,所以我很有可能会以任何方式获取这些问题。;-)@Steven我正在使用axon服务器并构建了一个命令和查询微服务。但是,每当我重新启动微服务时[正在处理事件存储区中的所有可用事件。我希望查询并命令即使在任何数量的启动之后也不要处理已处理的事件。我已阅读了有关TracingToken的内容,但无法了解其工作原理。您能否尽快帮我完成此操作?我有一个完成此操作的截止日期。我建议为此创建一个新问题s、 @upadhyayRakes。要知道,虽然你有一个最后期限很麻烦,但这并不是我在回答你的问题时所关心的。我非常愿意提醒你,但如果你有时间压力,我建议不要使用StackOverflow这样的免费论坛解决方案,而是直接联系一家公司(例如AxonIQ)。