springcloud微服务使用Feign时Feign、Ribbon、Hystrix超时时间分析

ribbonfeign超时时间分析

  • ribbonFeign默认超时时间都是1s
    • 下面是RibbonClientConfiguration 类,里面指明了ribbon默认连接超时时间默认读取超时时间都是1s
      • image-20220802034730409
  • 配置方法
feign:
  # 设置 feign 超时时间
    client:
          config:
           # default 设置的全局超时时间,指定服务名称可以设置单个服务的超时时间
           #超时时间默认为1s
           default:
                #不设置connectTimeout会导致readTimeout设置不生效
                #建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
               connectTimeout: 5000
                #指建立连接后从服务端读取到可用资源所用的时间
               readTimeout: 5000

#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
      #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
      ConnectTimeout: 5000
      #指的是建立连接后从服务器读取到可用资源所用的时间
      ReadTimeout: 5000
  • 注意:FeignRibbon 的超时时间只会有一个生效
  • 当我们没有显式配饰feign的超时时间的是时候,如果配置了ribbon的超时时间,则只有这个配置会生效,feign默认的1s超时无效
  • 如果我们feignribbon的超时时间都配置了,会以feign配置的为准

hystrix超时时间分析

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

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

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

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

    • hystrix:
        command:
          default:
            execution:
              timeout:
              #这里表示禁用hystrix的超时时间限制
                enabled: false
      

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

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

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

      #只有在feign中开启了hystrix功能后,hystrix的超时时间才回生效,如果我们压根不使用hystrix的功能就不用配置了
      feign:
        hystrix:
          enabled: true
      hystrix:
        command:
          default:
            execution:
              isolation:
                thread:
                  timeoutInMilliseconds: 6000
      ribbon:
        ReadTimeout: 5000
        ConectTimeout: 5000
      
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一酒。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值