1.seata的AT模式相关说明

官网说明

2.配置说明

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

配置导入到nacos中的效果大致如下(没用的配置导了很多,其实不需要全都放进去):
在这里插入图片描述

3.客户端说明

1.如果本身是基于nacos注册的微服务对应读取配置即可
2.本地测的是两个普通的springboot服务,使用同一个事务组,服务互调来模拟微服务调用代码入口如下:
样例代码入口
主要用下面两个服务模拟
在这里插入图片描述

4.使用说明

1.nacos启动;
2.seata启动(windows直接运行):
在这里插入图片描述
服务实例正常
3.客户端服务启动
正常注册
4.使用案例说明:
场景一:
模拟调用报错后回滚
在这里插入图片描述
先查询数据库值:
在这里插入图片描述
断点acc -1已被提交
在这里插入图片描述
查库数据,事务已被提交
在这里插入图片描述
主动异常,数据回滚(也可查询seata日志观察,这里不截图展示)
在这里插入图片描述
场景二:
目标值中途被其他操作修改
中间事务为全局事务时:
在这里插入图片描述

在这里插入图片描述
中间事件请求-效果如下:
在这里插入图片描述
最终数据结果和场景一一致,会正常回滚
场景三
目标值中途被其他操作修改
中间事务为本地事务时:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本地事务将以提交数据再次减一
在这里插入图片描述
结果为9998
在这里插入图片描述
全局事务异常,回滚报错
在这里插入图片描述
seata反复重试
在这里插入图片描述

结论

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐