影响到feign接口超时时间的主要有三类配置:feign、ribbon和hystrix。
feign的配置:
feign:
client:
config:
default: // 这个代表 服务,default为任意服务,可以指定服务名来指定调用该服务时的超时时间
connectTimeout: 毫秒时间,建立连接的超时时间,一般只在发现服务时用到
readTimeout: 毫秒时间 ,接口请求的超时时间
ribbon的配置:
ribbon:
ReadTimeout: 毫秒时间, 同feign的
ConnectTimeout:毫秒时间 , 同feign的
hystrix:
hystrix:
command:
default: // 这个代表接口,default为任意接口, 可以配置为指定接口(Feign接口类名#方法名(方法参数类型)),如:FeignXXClient#testMethod(String, String)
execution:
isolation:
thread:
timeoutInMilliseconds: 毫秒时间
feign和ribbon的配置二选一即可(如果都配置了,会以feign的配置为准),因为这两个配置都相当于是ribbon的配置,不同点在于feign的配置在ribbon的基础上做了扩展,可以支持配置服务级别的超时时间,并且如果feignClient中使用了url,超时时间也可以生效(ribbon当指定了url时是不会执行到的,因为指定了url就不需要走ribbon的负载均衡逻辑)。
hystrix配置的超时时间理论上应该要比 feign和ribbon的要大,因为feign和ribbon可以配置失败重试。当然最终的超时时间是以feign(或ribbon)和hystrix中最小时间为准。所以在单独设置某个接口的超时时间时,如果设置的超时时间比feign的要小,则可以生效。如果设置的时间比feign的要大,则会以feign的超时时间为准。