目录
超时配置和重试机制
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的总超时时间即可