在使用@FeignClient调用微服务接口时由于被调用接口响应时间超过,这时候要查看日志,查看从调用到超时是多长时间,如果日志不全,可以结合Spring cloud引入的依赖判断默认超时时间:
1. Feign没有引入(Ribbon / Hystrix):
- 连接超时:10 秒;
- 读取超时:60秒。
- 以上默认时间可以手动配置更改:
public Options() { this(10_000, TimeUnit.MILLISECONDS, 60_000, TimeUnit.MILLISECONDS, true); }
2. Feign集成了(Ribbon):
- Ribbon会覆盖Feign的默认超时时间:
- 连接超时:1秒;
- 读取超时:1秒。
- 可以通过更改Ribbon配置调整超时时间:
ribbon: ConnectTimeout: 1000 ReadTimeout: 1000
3. Feign集成了(Hytrix):
- Hytrix也有默认超时时间:
- 命令执行超时:1秒。
- 可以通过配置更改Hytrix配置调整超时时间:
hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 1000 # 默认1秒
配置优先级:
Ribbon > Fegin > Hytrix(Hytrix超时需大于 Ribbon 总超时,否则会提前熔断)
比较省力的配置方式:
- 直接对fegin进行配置:
feign: client: config: default: # 全局默认配置 connect-timeout: 5000 # 连接超时(覆盖 Ribbon.ConnectTimeout) read-timeout: 10000 # 读取超时(覆盖 Ribbon.ReadTimeout) user-service: # 针对特定服务的配置(优先级高于 default) connect-timeout: 3000 read-timeout: 8000
- 以上配置中
connect-timeout
对应Ribbon配置中的ConnectTimeout
; - 以上配置中
read-timeout
对应Ribbon配置中的ReadTimeout
- 会以Feign的配置为准,Ribbon的配置会响应的被覆盖,
- 配置优先级:
特定服务配置(如 user-service) > 全局默认配置(default) > Feign/Ribbon 的默认值(通常为 1 秒左右)。