解决Feign获取异常信息的处理方案
Feign获取异常信息
最近在使用Feign调用时,出现了异常,原本使用的是fallback,直接返回了自定义的结果
@Override public Result findUserNameById(String id) { return new Result(false, StatusCode.ERROR,"啊哦,用户客户端出现了异常"); }
但是无法获取具体的异常信息
解决方案
将fallback换成fallbackFactory
一、客户端接口指定熔断器处理工厂类
/** * @author * @date 2019/9/2215:37 */ @FeignClient(value = "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 */ @Component public class ArticleFallBackFactory implements FallbackFactory<ArticleClient> { @Override public ArticleClient create(Throwable throwable) { System.out.println("搜索微服务调用文章客户端出错:"+throwable.getMessage()==null?"":throwable.getMessage()); throwable.printStackTrace(); return new ArticleClientImpl() { @Override public 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中返回,这样调用接口的时候就可以得到第三方返回的错误信息,进行调整了。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。
相关文章
基于springcloud异步线程池、高并发请求feign的解决方案
这篇文章主要介绍了基于springcloud异步线程池、高并发请求feign的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-25解决Feign切换client到okhttp无法生效的坑(出现原因说明)
这篇文章主要介绍了解决Feign切换client到okhttp无法生效的坑(出现原因说明),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-25完美解决SpringCloud-OpenFeign使用okhttp替换不生效问题
这篇文章主要介绍了完美解决SpringCloud-OpenFeign使用okhttp替换不生效问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-25如何解决springcloud feign 首次调用100%失败的问题
这篇文章主要介绍了如何解决springcloud feign 首次调用100%失败的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-23- 这篇文章主要介绍了Feign接口方法返回值设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-08
- 这篇文章主要介绍了使用Feign消费服务时POST/GET请求方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-25
解决SpringCloud Feign传对象参数调用失败的问题
这篇文章主要介绍了解决SpringCloud Feign传对象参数调用失败的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-24- 这篇文章主要介绍了解决Feign获取异常信息的处理方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-27
Spring Cloud中使用Feign,@RequestBody无法继承的解决方案
这篇文章主要介绍了Spring Cloud中使用Feign,@RequestBody无法继承的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-22一篇文章教你如何在SpringCloud项目中使用OpenFeign
这篇文章主要介绍了SpringCloud 使用Open feign 优化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-08-16解决Spring Cloud Feign 请求时附带请求头的问题
这篇文章主要介绍了解决Spring Cloud Feign 请求时附带请求头的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-10-19- 这篇文章主要介绍了SpringBoot使用Feign调用其他服务接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-16
- 这篇文章主要介绍了使用feign服务调用添加Header参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-24
- 这篇文章主要为大家详细介绍了Android保存App异常信息到本地,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-20
解决启用 Spring-Cloud-OpenFeign 配置可刷新项目无法启动的问题
这篇文章主要介绍了解决启用 Spring-Cloud-OpenFeign 配置可刷新项目无法启动的问题,本文重点给大家介绍Spring-Cloud-OpenFeign的原理及问题解决方法,需要的朋友可以参考下...2021-10-02- 这篇文章主要介绍了解决feign调用接口不稳定的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-01
- Feign使得 Java HTTP 客户端编写更方便,Feign 灵感来源于Retrofit、JAXRS-2.0和WebSocket,这篇文章主要给大家介绍了如何使用原生的Feign的相关资料,需要的朋友可以参考下...2021-10-30
- 这篇文章主要介绍了使用Feign远程调用时,序列化对象失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-08
- 这篇文章主要介绍了feign实现传递参数的三种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-25
Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔断的示例
这篇文章主要介绍了Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔断的示例,帮助大家更好的理解和学习使用Spring Cloud,感兴趣的朋友可以了解下...2021-03-13