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


    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模式(待试验,后续有例子会贴出来)

  • 相关阅读:
    项目成功经验分享:做好项目承诺管理
    SpringMVC第一天
    FL Studio21免许可证完整版数字音频工作站(DAW)
    《斯科特·凯尔比的风光摄影手册》读书笔记
    前后端分离之权限管理
    RPA流程调试:准确定位错误原因及位置
    如何在Windows11上使用macOS Sonoma全新的慢镜屏幕保护程序
    JAVA计算机毕业设计中文网络小说平台系统Mybatis+源码+数据库+lw文档+系统+调试部署
    麻了,不要再动不动就BeanUtil.copyProperties!!!
    【AIGC调研系列】llama 3与GPT4相比的优劣点
  • 原文地址:https://blog.csdn.net/qq_28033239/article/details/125894390