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

发布于:2022-12-29 ⋅ 阅读:(457) ⋅ 点赞:(0)

目录

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超时时间, 这是为了保证在正常返回结果之前不会发送熔断。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到