假装构建器超时不起作用

时间:2016-02-23 07:10:47

标签: netflix-feign

我们正在使用Netflix feign连接到下游客户端,但我们的request.options连接和读取超时不起作用。

这是我们将参数传递给构建器

的方式
Feign.builder()
.client(new OkHttpClient(okHttpClient))
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.options(new Request.Options(connectTimeoutInMS, readTimeoutInMs)
.target(*,*);

我们将readTimeout和ConnectionTimeout设置为1秒。 但我们看到的是,即使目标响应时间超过1秒,它也不会超时并继续尝试连接。

1 个答案:

答案 0 :(得分:0)

根据Feign的文档,您的请求选项配置无效,因为您正在定义OkHttpClient:

  

OkHttpClient将Feign的http请求定向到OkHttp,从而启用SPDY和更好的网络控制。

因此,如果你的OkHttpClient没有定义这些值,它将采用默认值,这个值是10000ms(你可以在373行找到这些值:https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/OkHttpClient.java)。因此,您应该配置OkHttpClient,如:

OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient.setConnectTimeout(timeout, TimeUnit.MILLISECONDS); okHttpClient.setReadTimeout(timeout, TimeUnit.MILLISECONDS); okHttpClient.setWriteTimeout(timeout, TimeUnit.MILLISECONDS);