使用Axon框架的Saga时token_entry表为什么会被持续更新?
现象原因解析
你观察到的token_entry表持续更新是Axon框架的正常默认行为,和你注册的Saga类直接相关,具体逻辑如下:
- Axon的Saga默认依赖**Tracking Event Processor(跟踪事件处理器,TEP)**消费事件驱动流转,你添加
@Saga注解后,Axon自动配置会为该Saga自动初始化一个专属的TEP实例,且默认使用JPA实现将消费进度令牌存储在token_entry表中。 - 该更新语句是TEP的分片所有权心跳机制:为避免分布式场景下同一个TEP分片被多实例重复消费,持有分片的实例会定时更新自己持有的令牌记录的
timestamp字段,宣告当前分片所有权有效。默认心跳间隔为1秒,因此会持续触发对应更新SQL。 - 该心跳行为和是否有实际事件产生、Saga是否执行业务逻辑无关,只要对应TEP处于运行状态就会持续执行,属于框架的正常运维机制。
如果需要降低更新频率,可通过Spring Boot配置调整心跳间隔,示例如下:
# 将对应Saga的TEP令牌认领心跳间隔调整为2秒,[processor-name]替换为实际Saga对应的处理器名称 spring.axon.eventhandling.processors.[processor-name].token-claim-interval=2s
默认的1秒间隔对性能影响极小,绝大多数场景无需额外调整。
内容的提问来源于stack exchange,提问作者henry-jo
相关产品推荐
相关产品推荐

