openfeign和全局异常

我们在seata中使用openfeign调用服务的时候经常会出现一些问题

(1)在使用openfeign的时候使用到了全局异常,本来feign调用失败会触发降级异常,但是如果加上
全局异常处理器的话可能不会触发,导致降级失败
(2)服务a调用服务b的接口b(),b接口调用出错了,服务b本来应该返回异常,但是服务b自己写了全局
异常捕获了,导致a服务没有捕获到异常,也就是a服务调用b服务调用失败没有异常也就不会回滚

第一种的话可以参考 如何使得全局异常不会捕获到openfeign降级异常-CSDN博客

今天解决第二种

1.不在服务B中捕获异常:首先,您可以修改服务B的异常处理机制,不要在服务B中捕获异常,以便异常
能够向上游传播到服务A。这样,服务A就能够捕获并处理异常,触发回滚操作

如下图所示 

openfeign和全局异常_第1张图片

2.传播异常到服务A:如果服务B必须捕获异常,您可以重新抛出异常,使其传播到服务A。在服务B中,捕获
异常后重新抛出,然后服务A就能够捕获该异常并进行相应处理

如下图所示  

openfeign和全局异常_第2张图片

3.可以使用try-catch语句,在判断字段error

openfeign和全局异常_第3张图片

这是服务B错误的异常信息

openfeign和全局异常_第4张图片

这些方法都可以实现对openfeign和异常的调度 

 

你可能感兴趣的:(java,spring,spring,boot,servlet,maven,nio,log4j)