seata使用说明及AT模式异常回滚失败记录

1.seata的AT模式相关说明

官网说明

2.配置说明

咱先不研究源码,下载个服务能跑就行,官网版本很多,这里基于1.4.2版本的做个说明
seata-server–非源码对应配置已经改好
习惯用file的可以配置对应类型,这里已nacos为例说明:
1.nacos中的操作,按如下截图来即可
新增命名空间(注意:seata中namespace填id,名称值会导致配置读取不到
seata使用说明及AT模式异常回滚失败记录_第1张图片2.根据readme中的说明和截图修改对应的数据库及nacos配置
seata使用说明及AT模式异常回滚失败记录_第2张图片
导入脚本需要下载源码nacos-config.sh,或者下面补充的地方也可以尝试使用下
源码下载地址
上面的项目目录里加了包含.sh和.py文件
seata使用说明及AT模式异常回滚失败记录_第3张图片

配置导入到nacos中的效果大致如下(没用的配置导了很多,其实不需要全都放进去):
seata使用说明及AT模式异常回滚失败记录_第4张图片

3.客户端说明

1.如果本身是基于nacos注册的微服务对应读取配置即可
2.本地测的是两个普通的springboot服务,使用同一个事务组,服务互调来模拟微服务调用代码入口如下:
样例代码入口
主要用下面两个服务模拟
seata使用说明及AT模式异常回滚失败记录_第5张图片

4.使用说明

1.nacos启动;
2.seata启动(windows直接运行):
seata使用说明及AT模式异常回滚失败记录_第6张图片
seata使用说明及AT模式异常回滚失败记录_第7张图片
3.客户端服务启动
正常注册
4.使用案例说明:
场景一:
模拟调用报错后回滚
seata使用说明及AT模式异常回滚失败记录_第8张图片
先查询数据库值:
seata使用说明及AT模式异常回滚失败记录_第9张图片
断点acc -1已被提交
seata使用说明及AT模式异常回滚失败记录_第10张图片
查库数据,事务已被提交
seata使用说明及AT模式异常回滚失败记录_第11张图片
主动异常,数据回滚(也可查询seata日志观察,这里不截图展示)
seata使用说明及AT模式异常回滚失败记录_第12张图片
场景二:
目标值中途被其他操作修改
中间事务为全局事务时:
seata使用说明及AT模式异常回滚失败记录_第13张图片

seata使用说明及AT模式异常回滚失败记录_第14张图片
中间事件请求-效果如下:
在这里插入图片描述
最终数据结果和场景一一致,会正常回滚
场景三
目标值中途被其他操作修改
中间事务为本地事务时:
seata使用说明及AT模式异常回滚失败记录_第15张图片
seata使用说明及AT模式异常回滚失败记录_第16张图片
seata使用说明及AT模式异常回滚失败记录_第17张图片
本地事务将以提交数据再次减一
seata使用说明及AT模式异常回滚失败记录_第18张图片
结果为9998
seata使用说明及AT模式异常回滚失败记录_第19张图片
全局事务异常,回滚报错
在这里插入图片描述
seata反复重试
在这里插入图片描述

结论

1.seata的AT模式下,复杂流程中多个服务请求整体的全局事务完成前会被lock,但是本地事务是已提交的,回滚内容存入undo_log里,如果同为seata管理下的事务进行操作对应变更是无法提交的;
2.如果是非seata统一管理的事务,例如spring的本地事务,则会正常执行,如果恰好操作的是同一批数据,这种情况极有可能导致整个数据回滚失败,整个链路的数据都会被影响;
解决方案:
1.参考场景二的使用方式;
2.对于比较复杂的链路,建议做好代码层面主动补偿的
3.尝试seata的XA模式(待试验,后续有例子会贴出来)

你可能感兴趣的:(基础,spring,boot,java,seata)