简介:自定义全局异常下分布式事务失效解决方案
- 问题: 微服务场景下,配置了统一全局异常处理,导致seata在AT模式下无法正常回滚问题
- 如果使用Feign 配置了容错类(fallback)或者容错工厂(fallbackFactory),也是一样的问题
- 原因:服务A调用服务B, 服务B发生异常,由于全局异常处理的存在(@ControllerAdvice), seata 无法拦截到B服务的异常,从而导致分布式事务未生效
- 解决思路
配置了全局异常处理,所以rpc一定会有返回值, 所以在每个全局事务方法最后, 需要判断rpc是否发生异常
发生异常则抛出 RuntimeException或者子类