共计 1049 个字符,预计需要花费 3 分钟才能阅读完成。
导读 | 在微服务中,我们通过 feign 来调用其他微服务的功能,我们可以添加熔断来避免雪崩,因为我们熔断的目的是为了快速返回给调用方,避免雪崩;实际上,我们一般不写熔断回调方法,直接捕获异常,返回适当异常信息给用户即可。 |
1、实现
1-1、配置
增加以下配置,feign 开启熔断后,远端服务的异常会被消化,而走熔断方法;所以,需要以下配置配置来关闭熔断,好统一捕获服务异常;
# feign 配置 | |
feign.hystrix.enabled=false |
1-2、捕获异常并处理
捕获 feign 异常有两种方法,一种是在调用处 try…catch…;一种是统一捕获处理,推荐后者;
统一捕获:增加一个配置类,实现 ErrorDecoder 接口,在里面就可以捕获 feign 异常并上抛自定义异常了;
然后,在我们之前写的统一异常处理的就可以捕获和处理这个异常,并返回友好的信息给用户了;
public class FeignErrorDecoder implements ErrorDecoder | |
{public static final Logger log = LoggerFactory.getLogger(FeignErrorDecoder.class); | |
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() | |
阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配 | |
腾讯云新客低至 82 元 / 年,老客户 99 元 / 年 | |
代金券:在阿里云专用满减优惠券 |
正文完
星哥玩云-微信公众号
