seata使用说明及AT模式异常回滚失败记录
1.seata的AT模式相关说明
2.配置说明
配置导入到nacos中的效果大致如下(没用的配置导了很多,其实不需要全都放进去):
3.客户端说明
1.如果本身是基于nacos注册的微服务对应读取配置即可 2.本地测的是两个普通的springboot服务,使用同一个事务组,服务互调来模拟微服务调用代码入口如下: 主要用下面两个服务模拟
4.使用说明
中间事件请求-效果如下: 最终数据结果和场景一一致,会正常回滚 场景三 目标值中途被其他操作修改 中间事务为本地事务时: 本地事务将以提交数据再次减一 结果为9998 全局事务异常,回滚报错 seata反复重试
结论
1.seata的AT模式下,复杂流程中多个服务请求整体的全局事务完成前会被lock,但是本地事务是已提交的,回滚内容存入undo_log里,如果同为seata管理下的事务进行操作对应变更是无法提交的; 2.如果是非seata统一管理的事务,例如spring的本地事务,则会正常执行,如果恰好操作的是同一批数据,这种情况极有可能导致整个数据回滚失败,整个链路的数据都会被影响; 解决方案: 1.参考场景二的使用方式; 2.对于比较复杂的链路,建议做好代码层面主动补偿的 3.尝试seata的XA模式(待试验,后续有例子会贴出来)