解决方案
Feign Client 的 connectTimeout 和 readTimeout 需要同时配置:
feign.client.config.my-api.connectTimeout = 10000
feign.client.config.my-api.readTimeout = 600000
如果只配置了 readTimeout 或 connectTimeout 的其中一条,配置不生效。
问题描述
Feign Client 配置如下:
feign.client.config.default.connectTimeout = 3000
feign.client.config.default.readTimeout = 3000
feign.client.config.my-api.readTimeout = 600000
默认超时时间配置了 3 秒。
由于 my-api 的响应数据较大,于是配置了 10 分钟超时时间。
执行后发现,my-api 请求仍然 3 秒后就抛出如下异常:
Caused by: feign.RetryableException: Read timed out executing POST http://my-api
at feign.FeignException.errorExecuting(FeignException.java:67)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:104)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:108)
at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)
at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)