Feign调用时出现了异常但无法获取异常信息的问题怎么解决

Feign调用时出现了异常但无法获取异常信息的问题怎么解决

这篇文章主要介绍“Feign调用时出现了异常但无法获取异常信息的问题怎么解决”,在日常操作中,相信很多人在Feign调用时出现了异常但无法获取异常信息的问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Feign调用时出现了异常但无法获取异常信息的问题怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • Feign获取异常信息

    • 解决方案

      • 一、客户端接口指定熔断器处理工厂类

      • 二、ArticleFallBackFactory

      • 三、ArticleClientImpl

  • Feign中 fallback获取400等异常信息及message

    • 1.调用第三方的方法

      • 2.fallback函数返回值的组合

        • 3.返回值

        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,熔断时会自动调用。

        Feign调用时出现了异常但无法获取异常信息的问题怎么解决

        2.fallback函数返回值的组合

        自己重写的熔断函数中,重新create函数,其中throwable 会记录捕获的所有异常,我们通过getMessage可得到我们的信息,具体可以参考FallbackFactory接口的实现。

        Feign调用时出现了异常但无法获取异常信息的问题怎么解决

        3.返回值

        把fallback函数的返回值反倒返回值的msg中返回,这样调用接口的时候就可以得到第三方返回的错误信息,进行调整了。

        Feign调用时出现了异常但无法获取异常信息的问题怎么解决

        到此,关于“Feign调用时出现了异常但无法获取异常信息的问题怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!