解决Feign获取异常信息的处理方案
目录
- Feign获取异常信息
- 解决方案
- 一、客户端接口指定熔断器处理工厂类
- 二、ArticleFallBackFactory
- 三、ArticleClientImpl
- Feign中 fallback获取400等异常信息及message
- 1.调用第三方的方法
- 2.fallback函数返回值的组合
- 3.返回值
Feign获取异常信息 最近在使用Feign调用时,出现了异常,原本使用的是fallback,直接返回了自定义的结果
@Overridepublic Result findUserNameById(String id) {return new Result(false, StatusCode.ERROR,"啊哦,用户客户端出现了异常"); }
但是无法获取具体的异常信息
解决方案
将fallback换成fallbackFactory
一、客户端接口指定熔断器处理工厂类
/** * @author * @date 2019/9/2215:37 */@FeignClient(value = "https://www.it610.com/article/weblog-article",fallbackFactory = ArticleFallBackFactory.class,configuration = FeignInterceptor.class)public interface ArticleClient {/*** 根据文章id封装搜索文章实体* @param aid* @return*/@GetMapping("article/client/packageArticle/{aid}")Result packageArticle(@PathVariable("aid") String aid); }
二、ArticleFallBackFactory
/** * @author yunshi * @date 2019/10/2010:37 */@Componentpublic class ArticleFallBackFactory implements FallbackFactory {@Overridepublic ArticleClient create(Throwable throwable) {System.out.println("搜索微服务调用文章客户端出错:"+throwable.getMessage()==null?"":throwable.getMessage()); throwable.printStackTrace(); return new ArticleClientImpl() {@Overridepublic Result packageArticle(String aid) {return new Result(false, StatusCode.ERROR,"搜索微服务调用文章客户端出错 method:packageArticle"); }}; }}
有时候throwable的getMessage没有捕获到个别异常信息,干脆就直接打印了堆栈信息
三、ArticleClientImpl
/** * @author yunshi * @date 2019/9/2215:41 */public interface ArticleClientImpl extends ArticleClient {}
实操可用~
Feign中 fallback获取400等异常信息及message Spring cloud中当调用第三接口的时候,为防止超时一直等待,我们一般用断路由的方式来进行超时返回,我一般用Spring Cloud Hystrix。在调用第三方的地方进行fallback进行声明,然后重新fallback函数,配置超时时间,在超时时间内容没有返回或者参数错误就进人到fallback里面进行处理。具体的做法,网上一大堆,可自行百度。
然后第三方接口,在参数错误的时候,也是按400返回,尤其是json里面的数据key对应的value的合法性。而我们出错的时候想把第三参数的错误信息返回,这样就能很明确知道哪错了,而不是认为是超时,下面进入正题:
1.调用第三方的方法
fallbackFactory中调用自己重写的fallback,熔断时会自动调用。
文章图片
2.fallback函数返回值的组合
自己重写的熔断函数中,重新create函数,其中throwable 会记录捕获的所有异常,我们通过getMessage可得到我们的信息,具体可以参考FallbackFactory接口的实现。
文章图片
3.返回值
把fallback函数的返回值反倒返回值的msg中返回,这样调用接口的时候就可以得到第三方返回的错误信息,进行调整了。
文章图片
【解决Feign获取异常信息的处理方案】以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- Spark|Spark 数据倾斜及其解决方案
- 解决SyntaxError:|解决SyntaxError: invalid syntax
- EditText默认不获取焦点弹出键盘
- Spectrum|Spectrum 区块偶尔停止同步问题排查与解决笔记
- 一劳永逸地解决词汇量不够的问题