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

 更新时间:2021年08月27日 14:03:54   作者:一颗小陨石  
这篇文章主要介绍了解决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中返回,这样调用接口的时候就可以得到第三方返回的错误信息,进行调整了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java抓包工具fiddler实现请求转发

    Java抓包工具fiddler实现请求转发

    Fiddler是一个http协议调试代理工具,本文主要介绍了Java抓包工具fiddler实现请求转发,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Java基础篇之对象数组练习

    Java基础篇之对象数组练习

    对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋给数组就行了,这篇文章主要给大家介绍了关于Java基础篇之对象数组练习的相关资料,需要的朋友可以参考下
    2024-03-03
  • 详解Java的MyBatis框架中动态SQL的基本用法

    详解Java的MyBatis框架中动态SQL的基本用法

    这篇文章主要介绍了详解Java的MyBatis框架中动态SQL的基本用法,文中列出了一些常用SQL动态语句进行讲解,需要的朋友可以参考下
    2016-04-04
  • 侦听消息队列的Message Listener类示例详解

    侦听消息队列的Message Listener类示例详解

    Spring AMQP 是基于 Spring 框架的AMQP消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的 POJO的消息监听等,简化了我们对于RabbitMQ相关程序的开发,本文给大家介绍侦听消息队列的Message Listener类,感兴趣的朋友一起看看吧
    2023-12-12
  • Java concurrency之AtomicLongFieldUpdater原子类_动力节点Java学院整理

    Java concurrency之AtomicLongFieldUpdater原子类_动力节点Java学院整理

    AtomicLongFieldUpdater可以对指定"类的 'volatile long'类型的成员"进行原子更新。它是基于反射原理实现的。下面通过本文给大家分享Java concurrency之AtomicLongFieldUpdater原子类的相关知识,感兴趣的朋友一起看看吧
    2017-06-06
  • Java中BorderLayout布局管理器的两种排列方式

    Java中BorderLayout布局管理器的两种排列方式

    这篇文章主要介绍了Java中BorderLayout布局管理器的两种排列方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 使用Spring Cloud Stream处理事件的示例详解

    使用Spring Cloud Stream处理事件的示例详解

    Spring Cloud Stream 是基于 Spring Boot 的用于构建消息驱动微服务的框架,本文主要介绍了如何使用 Spring Cloud Stream 来处理事件,需要的可以参考一下
    2023-06-06
  • Spring Security结合JWT的方法教程

    Spring Security结合JWT的方法教程

    这篇文章主要给大家介绍了关于Spring Security结合JWT的方法教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • collection集合体系与并发修改异常的解决方法

    collection集合体系与并发修改异常的解决方法

    今天小编就为大家分享一篇关于collection集合体系与并发修改异常的解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • springboot @ComponentScan注解原理解析

    springboot @ComponentScan注解原理解析

    这篇文章主要介绍了springboot @ComponentScan注解原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论