Axon - 如何在 CommandHandler 中检索新的实体版本号?

Axon - How to retrieve the new entity version number in the CommandHandler?

我目前正在编写一个具有微服务架构的分布式应用程序。
为此,我在 axon framework 的帮助下应用了 CQRS 模式和事件源。因此数据最终是一致的。
写入端和读取端都可以通过 HTTP 访问;专门休息。

初始问题:
在 updating/creating 个实体之后,用户 [1] 应该能够看到结果。因为事件是异步处理的,所以 client/UI 不知道实体何时真正更新(或创建)。因此,当客户端在发送 update-request 之后但在处理事件之前获取数据时,未更改的数据被 returned。因此,用户可能认为应用程序已损坏 and/or 发送新请求。

解决方案尝试:
在寻找 read-after-write 问题的解决方案时,我遇到了这个 blog entry.
建议在写入响应中 return 新实体版本。然后,客户端可以请求具有预期实体版本的数据(如 Expect header)。如果实际版本等于或大于预期版本,则数据为 returned。否则带有 Retry-After Header 的空响应是 returned.

问题:

当客户端向写入端发送UpdateFoo 请求时,应用程序通过CommandGateway 发送相应的UpdateFooCommand。命令由发布 FooUpdatedEvent 的实体集合处理。读取端接收此事件并更新其实体视图,该视图可通过读取端的 REST 接口访问。
这是由轴突框架控制的。处理程序分别用 @CommandHandler@EventSourcingHandler 注释。
现在:如何在 CommandHandler 中访问受影响实体的新版本号,以便可以在更新响应中 return 编辑此版本号?

提前致谢

[1] 不仅是用户。也可以有非人类客户。

您可以在聚合中使用 AggregateLifecycle.getVersion()。您可以选择 return 该值作为命令结果的一部分,并在进行查询时传递该信息。如果查询没有该聚合信息的版本号,您可以(等待并)重试。