【问题标题】:Axon and Spring's repository integrationAxon 和 Spring 的存储库集成
【发布时间】:2020-05-27 13:03:31
【问题描述】:

我已阅读 Axon 文档并查看了所有提供的示例项目,尤其是我在此处引用的 AxonBank,但有一件事仍然困扰着我,并且据我所知没有解释:

据我了解,在 Axon 中,您对代表物化视图的读取数据库执行查询,例如包含最新 BankAccount JPA 实体 (here) 的 H2。但是,如果您有一个 Spring 存储库,例如JpaRepository<BankAccount, Long> (here),你也有 save-method,它应该只用于命令。不应该把仓库拆分成只读和只写仓库吗?

是否有人还可以向我指出 Axon 如何与此存储库一起工作的文档?因为对于联合开发人员来说,它看起来像一个“普通”的 JPA 存储库,即实体似乎是可变的并且始终是最新的。

但从理论的角度来看,我期望一个处于零状态的不可变实体通过应用所有事件来创建投影,这是否在 Axon 的背景中发生?

如果我用JpaRepository#save 更新实体而不是聚合,会发生什么情况?它们会不同步吗?

在这种情况下,我们似乎有两个事实来源,理论上不应该如此。

【问题讨论】:

    标签: event-sourcing axon


    【解决方案1】:

    让我试着帮助你!

    您所描述的是CQRS pattern - 尤其是查询方面! 您提到的 Repository 通常在 @EventHandlers 上用于构建您的预测,它将以您需要的方式存储数据!

    查看 AxonBank,应该清晰可见here

    我认为 Axon 文档中没有任何关于它的具体内容,但确实这是一个常规的 JPA 存储库。当然,你可以使用任何你想要的东西作为你的查询端。

    如果我用JpaRepository#save 更新实体而不是聚合,会发生什么情况?它们会不同步吗?

    在这种情况下,您的视图模型将根据事件以外的任何内容进行更新,这不是您想要的。此存储库应仅根据事件进行更新,大多数情况下,这些事件由您的聚合发送!

    在这种情况下,我们似乎有两个事实来源,理论上不应该如此。

    关于您关于真相来源的问题,您的事件应该始终是真相的来源。最后,除了使用@EventHandlers 之外,您不应该更新存储库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 2020-04-16
      • 2021-10-30
      • 1970-01-01
      相关资源
      最近更新 更多