【问题标题】:Axon Framework read all events from domain_event_entry table, and not to serialize payload in itAxon Framework 从 domain_event_entry 表中读取所有事件,而不是在其中序列化有效负载
【发布时间】:2019-09-02 08:08:12
【问题描述】:

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

似乎EventStore API 仅提供EventStore#readEvents(String aggregateId) 方法,用于读取特定聚合的所有事件。 但是,我想阅读所有事件,来自所有聚合。

我怎样才能做到这一点?

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

谢谢。

【问题讨论】:

  • @polosoft 需要这个功能做什么?或者,换一种说法,如果 Axon 有一个完美的基于注释的事件处理程序解决方案,那么直接访问 EventStore API 以检索所有事件的用例是什么?
  • 我想在 domain_event_entry 表中搜索,所以我不想序列化数据。
  • 我知道你想搜索它,这就是为什么你首先问我假设的问题。但是,为什么需要搜索呢?
  • 这是我们的客户提出的问题,出于某些原因,他们想知道用户可以在桌子上看到什么,例如我今天必须告诉我们的客户,用户可以做什么,并在 2015 年看到.
  • 不会让他们直接访问数据库吗?无论如何,正如所指出的,这将需要您进行一些自定义工作。您可以考虑的另一件事是设置 Axon Server。 Axon Server 仪表板中的“搜索”窗口以开箱即用的序列化格式显示整个事件列表。因此,如果您愿意,您将有效地免费获得“所有事件”视图。

标签: java spring-boot axon


【解决方案1】:

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

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

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

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

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

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


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

其次,我不想序列化payload中的数据,我想将它存储在JSON中,我该怎么做?

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

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

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

【讨论】:

  • 亲爱的史蒂文!谢谢你的支持。以后我会有几个关于 Sagas 的问题,请您有时间回答一下。
  • 我正在监控任何与 Axon 相关的问题,因此我很有可能会以任何方式解决它们。 ;-)
  • @Steven 我正在使用 axon 服务器并构建了一个命令和查询微服务。但是,每当我重新启动微服务时,它都会[处理事件存储中可用的所有事件。我想查询和命令即使在任意数量的启动之后也不处理已处理的事件。我已经阅读了有关 TracingToken 的信息,但我无法了解它是如何工作的。你能尽快帮我解决这个问题吗?我有一个截止日期来完成这项工作。
  • 我建议为此创建一个新问题,@upadhyayRakes。知道虽然你有一个截止日期很麻烦,但在回答你的问题时,这并不是我关心的问题。我非常愿意帮助您,但是如果您有时间压力,我建议您不要使用 StackOverflow 之类的免费论坛解决方案,而是直接联系公司(例如 AxonIQ)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多