解决Feign获取异常信息的处理方案

作者:一颗小陨石 时间:2023-12-11 13:17:54 

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获取异常信息的处理方案

来源:https://blog.csdn.net/weixin_43696529/article/details/102648333

标签:Feign,异常信息
0
投稿

猜你喜欢

  • JavaFx UI控件与代码间的绑定方法

    2021-09-13 00:40:27
  • Java Bean 作用域及它的几种类型介绍

    2022-12-02 20:39:42
  • Android实现简单实用的垂直进度条

    2023-10-22 19:10:13
  • Java C++实现相同MD5加密算法的方式

    2023-10-12 12:26:02
  • Java中final变量使用总结

    2022-09-29 08:32:00
  • Java事件处理步骤讲解

    2023-10-14 11:49:57
  • java 文件流的处理方式 文件打包成zip

    2022-07-08 12:43:03
  • Android运用onTouchEvent自定义滑动布局

    2021-09-24 04:39:06
  • Android实现注册界面

    2023-06-20 15:04:45
  • Java中对象的比较操作实例分析

    2023-03-05 03:58:09
  • python和JavaScript通信

    2023-02-20 19:40:23
  • WPF实现时钟特效

    2021-11-13 11:16:24
  • webBrowser执行js的方法,并返回值,c#后台取值的实现

    2023-12-07 13:29:13
  • Java实现TCP/IP协议的收发数据(服务端)代码实例

    2023-08-11 08:44:51
  • 基于springmvc之常用注解,操作传入参数

    2023-03-17 20:49:52
  • 解析C#中的私有构造函数和静态构造函数

    2021-11-27 07:13:15
  • java设计模式之简单工厂模式简述

    2021-06-14 17:11:20
  • 基于java实现斗地主代码实例解析

    2023-09-07 00:31:15
  • c#判断代码是否执行超时的几种方式总结

    2023-03-11 16:33:02
  • 简单了解Java中的可重入锁

    2023-12-18 12:29:19
  • asp之家 软件编程 m.aspxhome.com