spring cloud优雅的处理feign熔断异常

导读 在微服务中,我们通过feign来调用其他微服务的功能,我们可以添加熔断来避免雪崩,因为我们熔断的目的是为了快速返回给调用方,避免雪崩;实际上,我们一般不写熔断回调方法,直接捕获异常,返回适当异常信息给用户即可。

spring cloud优雅的处理feign熔断异常

1、实现
1-1、配置

增加以下配置,feign开启熔断后,远端服务的异常会被消化,而走熔断方法;所以,需要以下配置配置来关闭熔断,好统一捕获服务异常;

# feign配置
feign.hystrix.enabled=false
1-2、捕获异常并处理

捕获feign异常有两种方法,一种是在调用处 try…catch…;一种是统一捕获处理,推荐后者;

统一捕获:增加一个配置类,实现ErrorDecoder接口,在里面就可以捕获feign异常并上抛自定义异常了;

然后,在我们之前写的统一异常处理的就可以捕获和处理这个异常,并返回友好的信息给用户了;

@Configuration
public class FeignErrorDecoder implements ErrorDecoder
{
    public static final Logger log = LoggerFactory.getLogger(FeignErrorDecoder.class);
    @Override
    public Exception decode(String methodKey, Response response)
    {
        try
        {
            // 获取异常信息
            String message = Util.toString(response.body().asReader());
            JSONObject jsonObject = JSONObject.parseObject(message);
            log.error(message); //记录日志
            //直接上抛自定义异常
           // return new BizException(jsonObject.getInteger("code"), jsonObject.getString("msg"));
            return new BizException(jsonObject.getInteger("resultCode"), jsonObject.getString("resultMsg"));
        }
        catch (Exception ex)
        {
            //1、调用参数异常
            if (response.status() >= 400 && response.status() <= 500)
            {
                return new  BizException(ResultCode.INVALID_REQUEST);
            }
            else
            {
                return new BizException(ResultCode.INTERNAL_SERVER_ERROR);
            }
        }
    }
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/125543.html

(0)
上一篇 2021年8月29日
下一篇 2021年8月29日

相关推荐

发表回复

登录后才能评论