我们在seata中使用openfeign调用服务的时候经常会出现一些问题
(1)在使用openfeign的时候使用到了全局异常,本来feign调用失败会触发降级异常,但是如果加上
全局异常处理器的话可能不会触发,导致降级失败
(2)服务a调用服务b的接口b(),b接口调用出错了,服务b本来应该返回异常,但是服务b自己写了全局
异常捕获了,导致a服务没有捕获到异常,也就是a服务调用b服务调用失败没有异常也就不会回滚
第一种的话可以参考 如何使得全局异常不会捕获到openfeign降级异常-CSDN博客
今天解决第二种
1.不在服务B中捕获异常:首先,您可以修改服务B的异常处理机制,不要在服务B中捕获异常,以便异常
能够向上游传播到服务A。这样,服务A就能够捕获并处理异常,触发回滚操作
如下图所示
2.传播异常到服务A:如果服务B必须捕获异常,您可以重新抛出异常,使其传播到服务A。在服务B中,捕获
异常后重新抛出,然后服务A就能够捕获该异常并进行相应处理
如下图所示
3.可以使用try-catch语句,在判断字段error
这是服务B错误的异常信息
这些方法都可以实现对openfeign和异常的调度