gpt4 book ai didi

java - 在 Axon 中投影 @AggregateVersion

转载 作者:行者123 更新时间:2023-12-01 19:30:33 25 4
gpt4 key购买 nike

我在聚合中使用注释@AggregateVersion来处理乐观并发。为了接收请求中的此版本,发出请求的任何人都需要首先从我的 View 投影中获取当前版本。是否有一些标准方法来投影此版本字段(因为我猜这不应该包含在事件 DTO 中)?

到目前为止,我唯一能想到的就是计算投影中的投影事件,并在每次投影其中一个事件时增加版本+1。

最佳答案

Jasper 的 MetaData 建议可以帮助您实现这一点,但是这个问题有一个更简单的解决方案。

Axon 使用 ParameterResolvers 的概念(遗憾的是只描述了很短的 here ,但更深入 here )来解析命令/事件/查询、MetaDataMetaDataValue。但是,您也可以让框架解析序列号,该序列号对于事件源聚合聚合版本。您可以通过在事件处理函数中添加 @SequenceNumber 带注释的 Long 参数来实现此目的。

因此,您可以像这样编写事件处理程序:

@EventHandler
public void on(YourEvent event, @SequenceNumber Long aggregateVersion) {
// Update the query model And the aggregate version
}

话虽如此,这显然需要您处理事件处理组件中聚合中的所有事件,以便能够相应地更新版本。幸运的是,Axon 会识别您是否处理事件负载的父类。因此,如果您定义事件类层次结构,请确保来自给定聚合的所有事件都实现接口(interface) MyAggregateEvent。因此,您可以编写一个像这样的事件处理程序来覆盖所有剩余的事件,仅用于聚合版本更新,否则您不会对此感兴趣:

@EventHandler
public void on(MyAggregateEvent event, @SequenceNumber Long aggregateVersion) {
// Update the aggregate version only
}

希望这有帮助!

<小时/>

附注我刚刚注意到 Handling Events page引用指南确实说明了 @SequenceNumber 注释。

关于java - 在 Axon 中投影 @AggregateVersion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59855110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com