openfeign配置参数笔记

OpenFeign超时时长设置及详解

概念明确:

1 hystrix可配置的部分

hystrix.command.default.execution.timeout.enable=true //为false则超时控制有ribbon控制,为true则hystrix超时和ribbon超时都是用,但是谁小谁生效,默认为true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000//熔断器的超时时长默认1秒,最常修改的参数
circuitBreaker.requestVolumeThreshold=20 //触发熔断的最小请求次数,默认为20
circuitBreaker.sleepWindowInMilliseconds=5000 //休眠时长,默认为5秒
circuitBreaker.errorThresholdPercentage=50 //触发熔断的失败请求最小占比,默认50%

2 ribbon的可配置部分

ribbon.ReadTimeout=1000 //处理请求的超时时间,默认为1秒
ribbon.ConnectTimeout=1000 //连接建立的超时时长,默认1秒
ribbon.MaxAutoRetries=1 //同一台实例的最大重试次数,但是不包括首次调用,默认为1次
ribbon.MaxAutoRetriesNextServer=0 //重试负载均衡其他实例的最大重试次数,不包括首次调用,默认为0次
ribbon.OkToRetryOnAllOperations=false //是否对所有操作都重试,默认false
3 Feign的可配置部分

feign.hystrix.enabled=false //Feign是否启用断路器,默认为false
feign.client.config.default.connectTimeout=10000 //Feign的连接建立超时时间,默认为10秒
feign.client.config.default.readTimeout=60000 //Feign的请求处理超时时间,默认为60
feign.client.config.default.retryer=feign.Retryer.Default //Feign使用默认的超时配置,在该类源码中可见,默认单次请求最大时长1秒,重试5次

另外以上各种超时配置,如果都存在,则时间小的配置生效

好的,现在来说Feign的超时时长设置:

1 Feign的默认配置,是不启用hystrix,并且Feign的底层是调用ribbon来实现负载均衡的,所以为了不和ribbon的重试机制冲突因此也不会启用重试机制

因此配置Feign是必须要做的就是

feign.hystrix.enabled=true //开启Feign的hystrix,这样配置文件中的hystrix的配置才会生效,否则依然是默认的规则
之后设置hystrix的相关配置才可以在Feign中生效,因为Feign也调用了hystrix

2 ribbon和hystrix的配置

因为hystrix的超时时长,默认为1秒,太短了!因此我们一般一定会设置hystrix的超时时长

在上面启用了Feign的hystrix开关后,配置hystrix超时时长

execution.isolation.thread.timeoutInMilliseconds=10000 //这里设置了10秒
然后看ribbon的超时设置:

ribbon的超时设置无非2个:处理超时和连接超时,默认为1秒和1秒

但是,ribbon是有默认重试的,也是2个:统一实例的重试次数和负载均衡的不同实例的重试次数,默认为1次和0次

也就是说,在同一个实例上建立连接如果失败可以重试1次,处理请求如果失败可以重试1次,但是不包括首次调用,即:实际ribbon的超时时间是 1秒×2+1秒×2,即4秒

之后是,但是上面设置了hystrix超时为10秒,因此ribbon超时优先生效

最后是1个是否对所有操作重试的开关,默认为false,这里解释下什么是所有操作:

即:为false是,GET请求不论是连接失败还是处理失败都会重试,而对于非GET请求只对连接失败进行重试

因此得出结论,在使用了Feign的情况下需先开启断路器支持,之后配置hystrix的timeoutInMillisecond大于ribbon的 ( ConnectTimeout + ReadTimeout ) × 2即可

也就是说以后以后的配置中常用的配置项就是

1 开启Feign的hystrix开关

2 hystrix超时时长

3 配置ribbon的ConnectTimeout时长

4 配置ribbon的ReadTimeout 时长

猜你喜欢

转载自blog.csdn.net/u014641168/article/details/121317664