【问题标题】:Decoding the Payload present in DOMAIN_EVENT_ENTRY解码 DOMAIN_EVENT_ENTRY 中存在的有效负载
【发布时间】:2021-08-13 03:06:33
【问题描述】:

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

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

任何帮助将不胜感激。

【问题讨论】:

    标签: java spring-boot axon


    【解决方案1】:

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

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

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

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

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

    如需了解更多信息,我建议您前往official docs 或我们的Axon Academy!


    编辑 1:添加有关 QueryHandler 的信息

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

    【讨论】:

    • Campos 感谢您提供如此详细的解释。我想问一下我应该如何编写访问存储事件的查询,因为您提到查询 DomainEventEntry 不是我应该做的方式。我加入了 Axon Academy 并查看了官方文档。它确实提到了 QueryHandler,但我无法正确掌握这个概念。你能推荐一些好的来源,我可以看到它是如何实现的吗?再次感谢。
    • 我很乐意提供帮助!我在上面的答案中添加了一个编辑,解释了一些关于查询处理程序的一般信息。
    【解决方案2】:
    1. 您可以访问域事件表中的事件。使用 H2,您可以登录 H2 控制台并在那里找到它。
    2. 如果您使用查询,则负载将被反序列化(无 XML 或 JSON),并可用于记录信息或您需要执行的任何操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 2021-03-06
      • 2020-04-12
      • 2020-09-18
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      相关资源
      最近更新 更多