feign.RetryableException: Read timed out executing GET http://CLOUD-PAYMENT-SERVICE/payment/feign/timeOutat feign.FeignException.errorExecuting(FeignException.java:213)at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:115)at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:80)
java.net.SocketTimeoutException: Read timed out
default
默认是全局的,将default
换成某个服务的名称可以设置单个服务的超时时间
##设置feign客户端的超时时间
#建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
feign.client.config.default.connectTimeout: 8000
#指建立连接后从服务端读取到可用资源所用的时间
feign.client.config.default.readTimeout: 8000
#请求连接的超时时间(ms),限制20秒内必须请求到服务,并不限制服务处理的返回时间(缺省时默认1000ms)
ribbon.ConnectTimeout: 20000
#请求处理的超时时间(ms),下级服务响应最大时间,超出时间消费方(路由也是消费方)返回timeout(缺省时默认1000ms)
ribbon.ReadTimeout: 20000
ribbon.SocketTimeout: 20000
#同一台实例最大重试次数,不包括首次调用(对当前实例的重试次数)
ribbon.MaxAutoRetries: 0
#重试负载均衡其他的实例最大重试次数,不包括首次调用(切换实例的重试次数)
ribbon.MaxAutoRetriesNextServer: 0
#是否所有操作都重试
ribbon.OkToRetryOnAllOperations: false#单独设置某个服务的超时时间,会覆盖其他的超时时间限制,服务的名称以注册中心页面显示的名称为准,超时时间不可大于断路器的超时时间
#service-a.ribbon.ReadTimeout: 50000
#service-a.ribbon.ConnectTimeout: 50000
Feign
和 Ribbon
的超时时间只会有一个生效,规则:如果没有设置过 feign
超时,也就是等于默认值的时候,就会读取 ribbon
的配置,使用 ribbon
的超时时间和重试设置。否则使用 feign
自身的设置。两者是二选一的,且 feign
优先。
源码跟踪参考微服务系列:Spring Cloud 之 Feign、Ribbon、Hystrix 三者超时时间配置
在 feign.Request
中可以发现 OpenFeign
的默认的 connectTimeout
是 10 秒,readTimeout
是 60 秒。
其实 OpenFeign
集成了 Ribbon
,Ribbon
的默认超时连接时间、读超时时间都是 1 秒,源码在RibbonClientConfiguration#ribbonClientConfig
在org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer#execute
如图打断点即可看到本次请求的超时时间.