openfeign超时、重试配置 作者:马育民 • 2021-07-04 12:46 • 阅读:10826 # 说明 openfeign 访问 **服务提供者**,默认响应时间超过1秒就报错,而且默认不会开启重试 这就带来一些问题,比如 **服务提供者** 响应时间是 1.5秒,openfeign就会一直报错,解决方法如下 # ribbon配置 openfeign 底层使用的 ribbon,可通过 ribbon 进行配置 详见 [ribbon超时重试配置](https://www.malaoshi.top/show_1IX1QQtOV462.html "ribbon超时重试配置") ,但配置相对简单,有些配置项不需要写 如下: ``` ribbon: OkToRetryOnAllOperations: false #对所有操作请求都进行重试,默认false ReadTimeout: 4000 #负载均衡超时时间,默认值5000 ConnectTimeout: 3000 #ribbon请求连接的超时时间,默认值2000 MaxAutoRetries: 0 #对当前实例的重试次数,默认0 MaxAutoRetriesNextServer: 1 #对切换实例的重试次数,默认1 ``` ### OkToRetryOnAllOperations 为true 是可行的 OkToRetryOnAllOperations 为true,**所有请求**,读超时(ReadTimeout)后,都会进行重试 一般推荐设置为 false,除非 增删改实现 幂等性 # openfeign 配置 ### 全局配置 ``` feign: client: config: default: connectTimeout: 1000 readTimeout: 2000 retryer: feign.Retryer.Default # 重试 ``` **解释:** - connectTimeout:Feign的连接建立超时时间,单位毫秒。 **注意:**要大于 ribbon 的 ConnectTimeout - readTimeout:Feign的请求处理超时时间,单位毫秒。 **注意:**要大于 ribbon 的 ReadTimeout - retryer: feign.Retryer.Default:Feign使用默认的超时配置,在该类源码中可见,默认单次请求最大时长1秒,重试5次 ### 设置某服务超时时间 如果某个服务响应时间较长,那么超时时间需要单独设置,不能用全局的超时时间 ``` feign: client: config: 服务id: connectTimeout: 1000 readTimeout: 2000 retryer: feign.Retryer.Default # 重试 ``` 服务id,eureka中的服务id,如下图: [![](https://www.malaoshi.top/upload/pic/springcloud/QQ20200615-200357.png)](https://www.malaoshi.top/upload/pic/springcloud/QQ20200615-200357.png) ### 设置某个接口超时时间(未验证) 如果某个接口响应时间较长,那么超时时间需要单独设置,不能用全局的超时时间 ``` #开启熔断 #feign.hystrix.enabled=true #开启超时熔断,默认为true,如果为false,则熔断机制只在服务不可用时开启,这个配置不加,使用默认配置 #hystrix.command.default.execution.timeout.enabled=false #如果上面一个配置是true,设置超时熔断时间,因为openfeign中的熔断时间默认是1s,太短了,我们必须手工设置一个 #hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=15000 #下面的配置为单个接口设置超时时间 #xxx:要设置的某个FeignClient的类名 #yyy:方法名 #zzz:参数,如果是基础类型,就直接填基础类型:String/int;如果是某个对象,就直接填对象的类名 #hystrix.command.xxx#yyy(zzz).execution.isolation.thread.timeoutInMilliseconds=1000 #hystrix.command.FeignAsHttpCient#feignReadTimeout().execution.isolation.thread.timeoutInMilliseconds=23000 ``` # 都存在 以上各种超时配置,如果都存在,则时间小的配置生效 感谢: https://blog.csdn.net/zjj2006/article/details/109628470 原文出处:http://malaoshi.top/show_1IX1QeIPCCRO.html