SpringCloud+Seata+MybatisPlus多数据源@GlobalTransactional异常数据未回滚事务失效的解决方案

SpringCloud+Seata+MybatisPlus多数据源@GlobalTransactional异常数据未回滚的解决方案

    • 一、问题解析
      • 1.1 全局异常捕获吞异常导致分布式事务失效
      • 1.2 MybatisPlus多数据源dynamic-datasource-spring-boot-starter导致事务失效
    • 二、解决方案
      • 2.1 全局异常事务失效解决
      • 2.2 多数据源导致全局事务失效解决

SpringCloud整合Seata1.6.1部署与使用Nacos方式

一、问题解析

造成分布式事务失效,数据回滚异常的情况会有很多,下面介绍两种我遇到的情况,与对应的解决方案。

1.1 全局异常捕获吞异常导致分布式事务失效

一般的微服务都会使用@RestControllerAdvice全局异常捕获对接口出现的异常进行捕获,包装成统一的数据结构响应给前端。
如果A服务通过远程调用B服务A服务作为全局事务的入口,当B服务内部出现异常,被B服务的全局异常捕获到返回,A服务得到的响应结果并不是一个Exception,可能是一个经过B服务包装的JSON对象{"code": 500,"msg":"method error"}
此时A服务会认为B服务异常已经被处理,异常没有被A服务的全局事务感知到,所以导致全局事务未能回滚

1.2 MybatisPlus多数据源dynamic

你可能感兴趣的:(分布式微服务,分布式,分布式事务,seata,SpringCloud)