解码 DOMAIN_EVENT_ENTRY 中存在的有效负载

Decoding the Payload present in DOMAIN_EVENT_ENTRY

我已经开始探索轴突框架。 我正在关注这个 tutorial 它基本上是创建一个帐户,检索有关该帐户的信息和其他一些活动。 每当事件发生时,都会将一个条目存储在领域事件条目 Table 中。有效载荷也以散列形式存在。我的问题是:

  1. 是否可以访问域事件条目 table 中存在的条目?如果可以,那么如何?
  2. 此外,如果我想添加查询并将其记录在控制台中,负载是以散列形式显示还是以原始格式显示。

任何帮助将不胜感激。

  1. 您可以访问领域事件中的事件table。使用 H2,您可以登录到 H2 控制台并在那里找到它。
  2. 如果您使用查询,有效负载将被反序列化(无 XML 或 JSON)并且可用于记录信息或您需要做的任何事情。

查看您分享的项目,我将从升级您使用的版本开始。我可以看到它正在使用 4.4.3,而最新的是 4.5.3,它带来了许多改进和新功能。

在开始回答您的问题之前,我认为在这里注意一些事情很重要。

  1. 此项目未使用 Axon 服务器,因此您的事件存储在您选择的数据库中。在这种情况下,由于您的类路径上有 JPA,Axon Framework 会自动为您配置一个 JpaEventStorageEngine。类似于 TokenStore 实现。
  2. 了解序列化程序也很重要,为此我将参考 official docs。配置它们,您可以将事件存储为 XMLJSON.

所以,现在回答你的问题:

  1. 是的,您可以像访问普通数据库一样访问它们。因为我在项目上看到它有/h2-console enabled,所以去那里是我的第一选择。或者,您可以配置任何能够检查数据库内容的 tool/app。
  2. 为了记录查询,您必须配置 Hibernate 来记录查询。在任何情况下,它都会将其记录为反序列化对象,而不是 'payload' 形式。当然,您可以为 DomainEventEntry table 编写一些查询并记录有效负载,但这不是您应该使用 table.
  3. 的方式

如需更多信息,我建议您前往 official docs or to our Axon Academy!


编辑 1:添加关于 QueryHandler

的信息

如您所述,Axon Framework 提供 @QueryHandler 注释,它应该是您的查询端的一部分(来自命令端的应用程序,源自 CQRS 概念)。这是负责提供基于事件的信息的一方(在您的情况下来自您的事件存储 a.k.a。DomainEventEntry)。基本上,Events 将传播到查询端,在那里您将有一个或多个 EventHandlers components/methods 负责处理事件并将派生结果写入一种存储形式(通常关系数据库)。您还有一个或多个 QueryHandlers components/methods 将收到 Query 消息,执行查询(例如使用 Repository)和 return 响应给来电者。从这个意义上说,您真的可以按照自己的方式定制查询端! ref guide 有一些我推荐的有关查询处理程序的信息!