Axon - 如何在命令处理程序中检索新的实体版本号?



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

最初的问题:
更新/创建实体后,用户 [1] 应该能够看到结果。由于事件是异步处理的,因此客户端/UI 不知道实体何时真正更新(或创建(。因此,当客户端在发送更新请求之后但在处理事件之前获取数据时,将返回未更改的数据。因此,用户可以认为应用程序已损坏和/或发送新请求。

解决方案尝试:
在寻找写后读问题的解决方案时,我遇到了这个博客文章。
建议在写入响应中返回新的实体版本。然后,客户端可以请求具有预期实体版本(作为Expect标头(的数据。如果实际版本等于或大于预期版本,则返回数据。否则,将返回带有重试标头的空响应。

问题:

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

提前致谢

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

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

最新更新