如何使用Axon框架获得所有聚合?

时间:2017-11-13 07:06:19

标签: axon

我开始使用Axon框架并遇到了一些障碍。

虽然我可以使用他们的ID加载单个聚合,但我无法弄清楚如何获取所有聚合的列表,或者所有聚合ID的列表。

EventSourcingRepository类只有load()个方法返回一个聚合。

是否存在所有聚合(ID)的方法,或者我应该保留轴突之外的所有聚合ID的列表?

为了简单起见,我现在只使用InMemoryEventStorageEngine。 我使用的是Axon 3.0.7。

2 个答案:

答案 0 :(得分:2)

首先,我想知道为什么要从li检索所有聚合的完整列表。 设置Repository界面,以便您可以加载Repository来处理命令或创建新的Aggregate

询问您的问题,我几乎猜测您是否将其用于查询目的而不是命令处理。 然而,这不是Aggregate的预期用途。

您可以想到的一个原因是,您希望实现API调用以将命令发布到应用程序中特定类型的所有EventSourcingRepository。 那么采用这种情况是的,你需要自己存储aggregateId引用。

但结论我之前的问题:为什么要通过Aggregates界面检索聚合列表?

回复更新

关于你的评论,我在答案中添加了以下内容:

Axon帮助您设置应用程序时考虑事件源,但也使用CQRS(命令查询责任分离)。 这意味着应用程序的命令和查询端被拆开。

聚合Repository是应用程序的命令端,您可以在其中请求执行操作。 因此,它不提供聚合列表,因为命令是对 a 聚合的意图表达。因此,它只需要Repository用户检索一个聚合或创建一个聚合。

您需要的聚合列表示例是您的应用程序的查询端。 查询方(您的视图/实体)通常基于事件(通过事件源)进行更新。 对于您在应用程序中的任何查询要求,您通常会根据需要引入单独的视图。

在您的示例中,这意味着您将引入事件处理组件,侦听您的聚合事件,该事件使用聚合的查询模型更新存储库。

答案 1 :(得分:0)

传递到EventStore的{​​{1}}实现了EventSourcingRepository,这是一种获取聚合的方法。

尽管使用事件处理组件的框架方式可能会更好地扩展(取决于其使用方式/上下文),但我很确定事件处理组件还是由StreamableMessageSource<M extends Message<?>>驱动的。因此,如果我们想跳过框架而只是介入,可以这样做:

StreamableMessageSource<M extends Message<?>>