Spring Cloud的Feign和ribbon和Hystrix超时时间设置及关系

本文详细介绍Spring Cloud中Feign、Ribbon和Hystrix的超时配置,包括各自默认时间、源码分析,以及它们之间的关系,帮助理解如何为服务调用设置合理的超时策略。

目录

1 Feign超时配置

1.1 Feign源码默认超时时间

2 Ribbon超时配置

2.1 Ribbon源码默认超时时间

2.2 Feign和Ribbon超时的关系

3 Hystrix超时配置

我们用到spring Cloud的时候,Feign和Ribbon和Hystrix都是必不可少的配置项。下面就来详细说下他们三者的关系及如何配置。

本次演示采用:spring-cloud-starter-openfeign:2.1.0RELEASE版本

1 Feign超时配置

#feign超时配置
feign:
  client:
    config:
      # default 默认是全局超时时间,指定服务名称可以设置单个服务的超时时间
      default:
        # 建立链接所用的时间(连接超时时间:ms)
        connectTimeout: 2000
        # 建立链接后服务器读取资源所用的时间(读取超时时间:ms)
        readTimeout: 5000

 

1.1 Feign源码默认超时时间

源码中建立连接所用时间是10 000ms, 读取时间为60 000ms

我们来跟下源码看一下:

在启动类中找到该注解

 

2 Ribbon超时配置

ribbon:
  # 建立链接所用的时间(连接超时时间:ms)
  connectTimeout: 5000
  # 建立链接后服务器读取资源所用的时间(读取超时时间:ms)
  readTimeout: 5000
  # ribbon刷新时间
  ServerListRefreshInterval: 5000
  # 对当前实例的重试次数
  MaxAutoRetries: 0
  # 对下个实例(切换实例)的重试次数
  MaxAutoRetriesNextServer: 0

  # 是否所有操作都进行重试

  OkToRetryOnAllOperations: false

对于有些开发场景需要关闭ribbon重试机制,防止发送多次相同的请求

# 关闭重试机制(可以避免重复修改和插入数据)
spring.cloud.loadbalancer.retry.enabled=false

2.1 Ribbon源码默认超时时间

源码在这个类中:RibbonClientConfiguration(就不截图跟进了)

源码中建立连接所用时间是1 000ms, 读取时间为1 000ms

2.2 Feign和Ribbon超时的关系

Feign 和 Ribbon 的超时时间只有一个生效,规则:如果没有设置过 feign 超时,也就是等于默认值的时候,就会读取 ribbon 的配置,使用 ribbon 的超时时间和重试设置。否则使用 feign 自身的设置。两者是二选一,且 feign 优先

3 Hystrix超时配置

# 设置 hystrix 超时时间(默认是关闭熔断器)
feign:
  hystrix:
    enabled: true
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            # 熔断时间
            timeoutInMilliseconds: 20000

hystrix 的默认超时时间是 1s

如果请求的时间超出了 ribbon(Feign) 的超时限制,或者 hystrix 的超时限制,就会熔断。
一般来说,会设置 ribbon(Feign)的超时时间 <= hystrix超时时间, 这是为了保证在正常返回结果之前不会发送熔断。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值