feign首次调用时初始化操作导致的超时问题及处理

 更新时间:2026年03月19日 08:52:36   作者:一定不晚睡啊  
这篇文章主要介绍了feign首次调用时初始化操作导致的超时问题及处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

feign等待的时间默认情况下为1秒.如果1秒之内没有返回,那么此时会进行重试(默认情况下会重试一次)重试失败后 会进行降级逻辑处理,如果没有提供降级逻辑就会报错

问题1

feign在进行第一次远程调用时需要做很多的初始化操作(ribbon进行初始化),就会导致第一次远程调用的时消耗的时间较长,有的时候可能会出现超时,在我们业务系统中应该尽量避免触发超时!

解决方案1

对ribbon的初始化操作提前完成,不要在第一次调用的时候才进行初始化

#开启ribbon的饥饿加载
ribbon:
  eager-load:
    enabled: true
    clients: service-xxx服务模块,可写多个模块

解决方案2

延长feign的超时时间

弊端:产生雪崩效应的概率增大了

注意:显示指定后如果还触发超时,那么feign是不会进行重试

  • feign的超时配置方式 1(显式的指定超时时间):
feign:
#feign集成sentinel服务保护(断路器,防止雪崩)
  sentinel:
    enabled: true
  client:
    config:
   #feign延长超时时间
      default: #表示应用到所有服务提供方(也可以指定服务名称)
        connectTimeout: 4000
        readTimeout: 4000

feign的超时配置方式 2(精准设置接口超时配置):弊端:有时候需要每个接口都配置

2.1为feign接口添加Request.Options options参数

@GetMapping(value="/api/xx")
public abstract Resulttest(Request.Optionsoptions) ;

2.2远程调用时候传递Request.Options参数,直接new出来就行

Request.Optionsoptions=newRequest.Options(3, TimeUnit.MILLISECONDS, 3, TimeUnit.MILLISECONDS, true);
//参数说明:
connectTimeout:连接超时时间\时间单位
readTimeout :读取数据超时时间\时间单位
followRedirects :是否允许重定向

伴随问题:如果显示指定后如果还触发超时,那么feign是不会进行重试但是对于特殊业务场景需要进行重试时

解决方案:自定义重试器

重试原理:执行业务方法的时候报错了,那么此时就需要调用重试器中的continueOrPropagate方法。如果该方法产生了异常,那么重试结束;如果

该方法没有产生异常那么则进行重试。

如果我们想在自定义超时时间的同时使用重试机制,那么此时就需要自定义重试器。

  • 步鄹1:自定义一个类实现Retryer重写方法
public class MyRetryer implements Retryer {
    
    private intstart=1 ;
    private intend=3 ;  //规定重试次数
​
​
    /**
     * 远程调用失败以后,会调用重试器的这个方法
     */
    @Override//判断是否需要重试
    public void continueOrPropagate(RetryableExceptione) {
        
        if(start>end) {
            throwe ;
        }
        start++ ;
        System.out.println("MyRetryer...continueOrPropagate....");
    }
​
    @Override//返回对象
    public Retryer clone() {
        return new MyRetryer();
    }
    
}

步鄹2:将自定义的重试器配置给feign

feign:
#feign集成sentinel服务保护(断路器,防止雪崩)
  sentinel:
    enabled: true
  client:
    config:
   #feign延长超时时间
      default: #表示应用到所有服务提供方(也可以指定服务名称)
       # connectTimeout: 4000
       # readTimeout: 4000       
        retryer: com.aa.bb.MyRetryer #配置重试器,全类名

可以将配置抽取到nacos中心,哪里需要哪里添加

  #feign集成sentinel服务保护(断路器,防止雪崩)
feign:
  sentinel:
    enabled: true
  client:
    config:
   #feign延长超时时间
      default:
        connectTimeout: 1500
        readTimeout: 1500
        retryer: com.xx.feign.retry.FeignClientRetryer

#配置ribbon的饥饿加载
ribbon:
  eager-load:
    enabled: true
    clients: 微服务,微服务2,微服务3

总结

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

相关文章

  • Spring事件监听基本原理与使用详解

    Spring事件监听基本原理与使用详解

    这篇文章主要介绍了Spring事件监听基本原理与使用详解,Spring的事件监听机制和发布订阅机制是很相似的:发布了一个事件后,监听该类型事件的所有监听器会触发相应的处理逻辑,需要的朋友可以参考下
    2024-01-01
  • Java Excel文件加密保护数据安全

    Java Excel文件加密保护数据安全

    这篇文章主要为大家介绍了Java Excel文件加密保护数据安全的方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Java反射框架Reflections示例详解

    Java反射框架Reflections示例详解

    这篇文章主要介绍了Java反射框架Reflections示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • java nio中的ByteBuffer扩展问题

    java nio中的ByteBuffer扩展问题

    这篇文章主要介绍了java nio中的ByteBuffer扩展问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Java Lambda表达式超详细介绍

    Java Lambda表达式超详细介绍

    这篇文章主要介绍了Java Lambda表达式,Lambda表达式是Java SE 8中一个重要的新特性, Lambda 表达式(Lambda expression)可以看作是一个匿名函数,基于数学中的λ演算得名,也可称为闭包(Closure),下面来看看文章具体的详细介绍吧
    2022-02-02
  • Spring Boot 定制与优化内置的Tomcat容器实例详解

    Spring Boot 定制与优化内置的Tomcat容器实例详解

    本文主要记录对内置容器优化和定制的方式,用于自己加深对SpringBoot理解。本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友参考下吧
    2017-12-12
  • Spring开发中自定义注解的使用详解

    Spring开发中自定义注解的使用详解

    这篇文章主要介绍了Spring开发中自定义注解的使用详解,在Java项目中,可以自定义注解,方便进行某些处理操作,提供开发效率,需要的朋友可以参考下
    2024-01-01
  • 浅谈java中为什么重写equals后需要重写hashCode

    浅谈java中为什么重写equals后需要重写hashCode

    今天带各位学习一下java中为什么重写equals后需要重写hashCode,文中有非常详细的图文介绍及代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • Java实现TXT转Excel并读取Excel内容到List集合的完整代码

    Java实现TXT转Excel并读取Excel内容到List集合的完整代码

    在Java开发中,我们经常会遇到文件格式转换的需求,比如将txt​​​文件转换为​​excel​​​文件,并且可能需要进一步处理​​excel文件中的数据,本文将详细介绍如何使用 Java 代码完成这个任务,我们会使用 ​​EasyExcel​​​ 库来实现 ​​excel​​ 文件的读写操作
    2025-07-07
  • IDEA整合SSM框架实现网页上显示数据

    IDEA整合SSM框架实现网页上显示数据

    最近做了个小项目,该项目包在intellij idea中实现了ssm框架的整合以及实现访问,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05

最新评论