Axon和Spring的存储库集成

问题描述 投票:0回答:1

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

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

有人还可以向我指出文档,Axon如何使用此存储库吗?因为对于一个统一的开发人员来说,它看起来像一个“常规” JPA存储库,也就是说,该实体看起来是可变的,并且始终是最新的。

但是从理论上讲,我希望一个零状态的不可变实体通过应用所有事件来创建投影,这是否会在Axon的背景下发生?

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

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

event-sourcing axon
1个回答
0
投票
让我来帮助您!

您正在描述的是CQRS pattern-尤其是查询方面!您提到的存储库通常在@EventHandler上用于构建投影,该投影将以您需要的方式存储数据!

看AxonBank,它应该清晰可见here

我认为Axon文档上没有关于它的任何具体说明,但是确实这是一个常规的JPA存储库。当然,您可以根据需要使用任何内容。

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

在这种情况下,您的视图模型将基于事件以外的任何其他事物进行更新,这不是您想要的。仅应根据事件(大多数情况下由您的集合发送)来更新此存储库!

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

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

© www.soinside.com 2019 - 2024. All rights reserved.