系统定制开发springcloud微服务使用Feign时Feign、Ribbon、Hystrix超时时间分析

ribbonfeign系统定制开发超时时间分析

  • ribbonFeign系统定制开发默认超时时间都是1s
    • 下面是RibbonClientConfiguration 类,系统定制开发里面指明了ribbon系统定制开发默认连接超时时间系统定制开发默认读取超时时间都是1s
  • 配置方法
feign:  # 设置 feign 超时时间    client:          config:           # default 系统定制开发设置的全局超时时间,系统定制开发指定服务名称可以设置单个服务的超时时间           #超时时间默认为1s           default:                #不设置connectTimeout会导致readTimeout设置不生效                #建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间               connectTimeout: 5000                #指建立连接后从服务端读取到可用资源所用的时间               readTimeout: 5000#设置feign客户端超时时间(OpenFeign默认支持ribbon)ribbon:      #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间      ConnectTimeout: 5000      #指的是建立连接后从服务器读取到可用资源所用的时间      ReadTimeout: 5000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 注意:FeignRibbon 的超时时间只会有一个生效
  • 当我们没有显式配饰feign的超时时间的是时候,如果配置了ribbon的超时时间,则只有这个配置会生效,feign默认的1s超时无效
  • 如果我们feignribbon的超时时间都配置了,会以feign配置的为准

hystrix超时时间分析

  • hystrix 的默认超时时间是 1s,这个配置在 HystrixCommandProperties 类中:

    private static final Integer default_executionTimeoutInMilliseconds = 1000;
    • 1
  • 配置方法:

# 设置 hystrix 超时时间feign: hystrix:    enabled: true#注意:这个hystrix要单独配置才会生效,不能接着上面的feign里面的hystrix配置,那样是无效的hystrix: command:    default:      execution:        isolation:          thread:            timeoutInMilliseconds: 6000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 注意:我们如果没有开启feignhystrix功能的话那么hystrix的超时时间就不会生效,即有没有配置

    • feign:  hystrix:    enabled: true
      • 1
      • 2
      • 3
  • 如果配置了hystrix功能,那么它的超时时间默认就是开启的,且该时间是1秒,这个时间和ribbon的超时时间会同时起作用,不像上面的feign的超时时间和ribbon超时时间二选一,我们可以通过上面的配置hystrix的超时时间让它更长,或者显式禁用hystrix的超时时间:

    • hystrix:  command:    default:      execution:        timeout:        #这里表示禁用hystrix的超时时间限制          enabled: false
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      注意:如果我们禁用了hystrix的超时时间配置,那么我们在方法上用@HystrixCommand里这样配置超时时间也会失效:

      @HystrixCommand(fallbackMethod = "xxxxx",commandProperties = {      @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")})
      • 1
      • 2
      • 3
      • 也就是说这里的1.5s超时配置无效
  • 开启feignhystrix功能后我们可以通过注解在方法上面配置针对该方法的超时时间,这个时间限制是在上面配置文件之后的,即先判断时间是否超出配置文件中的(没配置就是默认1s),再判断是否超出当前注解里面规定的
@HystrixCommand(fallbackMethod = "paymentTimeOutFallbackMethod",commandProperties = {        @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")})
  • 1
  • 2
  • 3
  • 如果注解里面禁用了超时时间配置,那么这里也不会生效
  • 再次提醒:hystrix的超时时间配置和ribbon的超时时间配置是同时生效的

    • 例如如果我们远程调用另一服务,而另一服务需要运行3s,那么此时我们如果不想报错,就需要同时配置hystrixribbon的超时时间超过3s:

      #只有在feign中开启了hystrix功能后,hystrix的超时时间才回生效,如果我们压根不使用hystrix的功能就不用配置了feign:  hystrix:    enabled: truehystrix:  command:    default:      execution:        isolation:          thread:            timeoutInMilliseconds: 6000ribbon:  ReadTimeout: 5000  ConectTimeout: 5000
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发