【发布时间】:2022-01-12 13:59:47
【问题描述】:
在没有 AxonServer 的情况下,在 REST-Axon 程序中对聚合执行基本 GET 的最简单方法是什么?
- 我有一个带有聚合 FooAggregate 的简单 springboot Axon-and-REST 应用程序。
- 我使用
POST /foos创建 Foo,它在命令网关等上发送命令。 - 我通过实际查询
GET /foo-summaries来查询所有 Foo 的列表,这会在查询网关上触发查询对象,并返回 FooSummary 对象的位置,其中 FooSummary 是我在侦听 FooCreated 和 FooUpdated 事件的投影中创建的 JPA 实体.
到目前为止所有标准的东西。但是简单的GET /foos/{id} 呢?
那个 URL /foo/{id} 是我想在 POST /foos 的 Location 标头中返回的内容
我希望 this GET 返回 all 我的 Foo 的详细信息 - 所有这些都被建模为 FooAggregate 的属性(FooSummary 可能会返回一个子集以供列出)
现在,Axon documentation suggests this:
标准存储库存储聚合的实际状态。每次更改时,新状态都会覆盖旧状态。这使得应用程序的查询组件可以使用命令组件也使用的相同信息。根据您创建的应用程序类型,这可能是最简单的解决方案。
但这仅适用于我使用状态存储的聚合,对吗?我正在使用带有 JPA 事件存储的事件源聚合。
我的选择似乎是:
-
忘记事件源并使用存储状态聚合方法,建议作为“最简单”的方法(我没有任何特定需要事件源我的聚合 - 尽管我肯定 事件采购我的投影
-
将全部详细信息保存在我的 FooSummary 投影表中,并使用与
GET /foo-summaries略有不同的查询将GET /foo/{id}定向到那里(或者,只需将其称为GET /foos并返回摘要) -
创建一个单独的“投影”来存储完整的 Foo 详细信息。这将实际上与我们在状态存储聚合中使用的相同,所以看起来有点奇怪。
-
第四个选项 - 这个问题的原因是什么?
【问题讨论】:
标签: axon