13、SpringCloud实战:超时重试机制

目录

超时配置和重试机制

FeignClient 、Ribbon 、 Hystrix三个之间配置优先级的关系

配置常用属性

Ribbon超时和重试配置:

Ribbon重试次数计算公式:

FeignClient 超时配置:

Hystrix超时配置:

Hystrix超时计算公式:


超时配置和重试机制

FeignClient 、Ribbon 、 Hystrix三个都有超时配置

FeignClient 、Ribbon 、 Hystrix三个之间配置优先级的关系

Hystrix 配置 > FeignClient 配置 > Ribbon 配置

*

配置超时时:Hystrix 超时时间 > FeignClient超时时间 > Ribbon 超时时间

重试机制:当网络不可达时或超时时会触发重试机制

Hystrix无重试机制,feign和ribbon都有重试机制

配置常用属性

Ribbon超时和重试配置:

#全局配置
ribbon:
  ConnectTimeout: 500 #请求连接的超时时间
  ReadTimeout: 1000 #请求处理的超时时间
  MaxAutoRetries: 1 #最大重试次数,当Eureka中可以找到服务,但是服务连不上时将会重试
  MaxAutoRetriesNextServer: 1 #切换实例的重试次数
  OkToRetriesOnAllOperations: true #对所有的操作请求都进行重试,如果是get则可以,如果是post、put等操作没有实现幂等的情况下是很危险的

Ribbon重试次数计算公式:

MaxAutoRetries**+MaxAutoRetriesNextServer+(MaxAutoRetries*MaxAutoRetriesNextServer)**

如上配置:

重试次数= 1+1+(1*1) = 3次

FeignClient 超时配置:

feign:
  client:
    config:
      #default代表所有服务
      default:
        #feign客户端建立连接的超时时间
        connect-timeout: 500
        #feign客户端建立连接后处理请求的超时时间
        read-timeout: 1000

Hystrix超时配置:

hystrix:
  command:
    #默认配置,代表所有服务
    default:
      #执行策略
      execution:
        timeout:
          #是否打开超时
          enabled: true
        isolation:
          #资源隔离模式,默认为线程池隔离 Thread,还有一种叫信号量隔离SEMAPHORE
          strategy: THREAD
          thread:
            #超时时间,默认为1000ms
            timeoutInMilliseconds: 9000
            #超时时中断线程
            interruptOnTimeout: true
            #取消时候中断线程
            interruptOnFutureCancel: false
          semaphore:
            #信号量模式下的最大并发数
            maxConcurrentRequest: 2

Hystrix超时计算公式:

先计算ribbon的总超时时间

[ReadTimeout+(MaxAutoRetries*ReadTimeout)]*****(MaxAutoRetriesNextServer+1)

如上配置

[1000+(1*1000)]*(1+1)=4000ms

那么Hystrix的超时时间大于ribbon的总超时时间即可

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: