当前位置:首页 > 编程笔记 > 正文
已解决

Feign调用异常触发降级捕获异常

来自网友在路上 164864提问 提问时间:2023-10-08 20:47:08阅读次数: 64

最佳答案 问答题库648位专家为你答疑解惑

通过配置fallbackFactory来捕获异常信息,代码如下

@FeignClient(name = "user", fallbackFactory = UserFallBackFactory.class)
public interface UserFeign {@PostMapping("/get/list")Map getList();}
@Component
public class UserFallBackFactory implements FallbackFactory<UserFeign> {@Overridepublic UserFeign create(Throwable throwable) {// 捕获具体异常信息String message= FeginUtil.getMessage(throwable);return new UserFeign() {@Overridepublic Map getList() {Map<String, Object> map = new HashMap<>();map.put("status", 500);map.put("message", message);return map;}}}
}
public class FeginUtil {public static String getMessage(Throwable e) {if (e instanceof FeignException) {FeignException feignException  = (FeignException) e;String url = feignException.request().url();int status = feignException.status();String message = feignException.getMessage();if (status == 404) {return "服务未找到:" + url;}if (message.contains("Read timed out")) {return "服务处理请求超时:" + url;}if (message.contains("connect timed out")) {return "服务连接超时:" + url;}}if (e instanceof RuntimeException) {RuntimeException runtimeException  = (RuntimeException) e;String message = runtimeException.getMessage();if (StringUtils.isNotEmpty(message)) {if (message.contains("Load balancer does not have available server for client")) {String[] split = message.split(":");if (split.length > 2) {return "没有找到可用的服务:" + split[2];}}if(message.contains("[") && message.contains("]")){int startIndex = message.lastIndexOf("[") + 1;int endIndex = message.lastIndexOf("]");String result = message.substring(startIndex, endIndex); JSONObject jsonObject = JSONObject.parseObject(result);return "服务调用异常:" + jsonObject.getString("exception");}}}return "系统异常:" + e.getMessage();}
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"Feign调用异常触发降级捕获异常":http://eshow365.cn/6-17429-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!