首页 > 其他分享 >OpenFeign和Ribbon的过期时间

OpenFeign和Ribbon的过期时间

时间:2022-10-29 10:58:16浏览次数:45  
标签:OpenFeign 过期 接口 时间 Ribbon 超时 config hello ribbon

openfeign之前的版本中集成了ribbon,并且openfeignribbon都有超时时间,那在项目中具体以哪个超时时间为准,我们一探究竟

首先是依赖的版本:

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-alibaba-dependencies</artifactId>
   <version>2.2.6.RELEASE</version>
   <type>pom</type>
   <scope>import</scope>
</dependency>

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-dependencies</artifactId>
   <version>Hoxton.SR9</version>
   <type>pom</type>
   <scope>import</scope>
</dependency>

在 Provider 中编写一个接口,直接睡眠 3 秒

@GetMapping("/hello")
public String hello() {
  try {
      TimeUnit.SECONDS.sleep(3);
  } catch (InterruptedException e) {
      e.printStackTrace();
  }
  return "provider hello";
}

我们调用 Consumer 项目中的接口,在 Consumer 接口中通过 Feign 接口调用 Provider 的 hello 接口 ,在 Consumer 中直接报 Read time out
在这里插入图片描述
这是因为在ribbon,默认的连接超时和读超时都为 1 秒,在RibbonClientConfiguration类可以看到ConnectTimeoutReadTimeout默认是 1

@Bean
@ConditionalOnMissingBean
public IClientConfig ribbonClientConfig() {
  DefaultClientConfigImpl config = new DefaultClientConfigImpl();
  config.loadProperties(this.name);
  config.set(CommonClientConfigKey.ConnectTimeout, 1000);
  config.set(CommonClientConfigKey.ReadTimeout, 1000);
  config.set(CommonClientConfigKey.GZipPayload, true);
  return config;
}

在配置文件中,我们配置上ribbon的超时时间,接口就不会报错

ribbon:
  ConnectTimeout: 3000
  ReadTimeout: 5000

openfign 的超时时间是多少呢?默认的连接超时为 10 秒,读超时为 60

public Options() {
  this(10L, TimeUnit.SECONDS, 60L, TimeUnit.SECONDS, true);
}

如果 ribbon 为默认的超时时间,设置 openfeign 的连接超时时间为 3 秒,读超时时间为 5 秒

feign:
  client:
    config:
      default:
        connectTimeout: 3000
        readTimeout: 5000

可以发现接口也不会报错


如果设置 openfeign 的连接超时时间设置为 2 秒,读超时时间设置为 3 秒;ribbon 的连接超时时间设置为 5 秒,读超时时间设置为 6 秒。

feign:
  client:
    config:
      default:
        connectTimeout: 2000
        readTimeout: 3000
ribbon:
  ConnectTimeout: 5000
  ReadTimeout: 6000

并且 provider 接口修改为睡眠 5 秒,也就是超过了 openfeign 的超时时间,没有超过 ribbon 的超时时间

@GetMapping("/hello")
public String hello() {
  try {
      TimeUnit.SECONDS.sleep(5);
  } catch (InterruptedException e) {
      e.printStackTrace();
  }
  return "provider hello";
}

结果接口还是报错了!java.net.SocketTimeoutException: Read timed out


通过以上的校验,可以发现有三点:

  • openfignribbon 都不设置超时时间的情况下,以ribbon为准,默认的连接超时和读超时都为 1
  • openfign设置超时时间,ribbon不设置,则以 openfign 为准
  • openfignribbon 都设置了超时时间,则以 openfign 为准

欢迎小伙伴们积极指正和讨论,一起共同成长。

标签:OpenFeign,过期,接口,时间,Ribbon,超时,config,hello,ribbon
From: https://www.cnblogs.com/back-garden/p/16838224.html

相关文章

  • 【分布式】-- 基于Nacos、OpenFeign搭建的微服务抽奖系统后台小案例
    1.项目介绍最近入项目之前要求熟悉一下SpringCloudNacos微服务基于Feign接口调用并整合Swagger2进行接口文档展示给前端,所以自己按照要求来编写并整合了一套基于SpringClou......
  • vcenter密码设置永不过期
    由于机房断电,原本的vcenter重启后web页面出现报错,为尽快恢复vcenter管理机,直接停用了旧的vcenter虚机,重新安装了一台vcenter,两个月后,页面开始报警密码即将到期;经查阅相关......
  • sentinel中如何使用@SentinelResource和openFeign来进行服务熔断和降级的操作
    今天我们就来好好说一下,sentinel中如何使用@SentinelResource和openFeign来进行服务熔断和降级的操作SentinelResource在上一节中,我们也使用到过这个注解,我们需要了解的......
  • spring cloud Alibaba 集成openfeign 和 loadbalancer
    springcloudAlibaba集成openfeign和loadbalancer1.1引入依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring......
  • ora-28001 ora-28002 密码过期
    问题描述:trace文件中发现存在ora-28001告警,如下所示:数据库:oracle11.2.0.464位MonOct1704:26:022022Errorsinfiled:\app\administrator\diag\rdbms\orcl\orcl\trace......
  • SpringCloud-03 Netflix Ribbon学习笔记
    @​​TOC​​一、Ribbon简介1、什么是Ribbon?SpringCloudRibbon是基于NetflixRibbon实现的一套客户端负载均衡的工具,它可以很好地控制HTTP和TCP客户端的行为。简单的......
  • OpenFeign 使用
    一、调用方Client1. 创建Springboot项目,并注册到服务注册中心2. 应用OpenFeign依赖3. 启动类添加注解@EnableFeignClients4. 创建接口+@F......
  • ORACLE中如何找出统计信息过期的表
    在ORACLE数据库当中,我们如何判断当前对象的统计信息是否过期/过时(Stale)的呢?从哪些维度去判断呢?我们有那些方法呢?下面介绍ORACLE数据库中一些找出过期统计信息的方法,主要......
  • SpringBoot引入OpenFeign,不使用注册中心
    转自:https://blog.csdn.net/wind_chasing_boy/article/details/123822427(做了部分修改)【前言】最近接到一个需求,需要对接第三方平台的api,在设计方案通过之后,打算将对接服......
  • jwt 滑动过期方案
    网上大多实现jwt滑动过期的方案要结合Redis,或者返回俩个token,我这里介绍一个稍微简单点的方案,由于 jwt的总的有效时间是expires加上ClockSkew,那么我们就在这个Clo......