2

我们正在使用 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 秒,它也不会超时并继续尝试连接。

4

1 回答 1

0

根据 Feign 的文档,您的请求选项配置不起作用,因为您正在定义 OkHttpClient:

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

因此,如果您的 OkHttpClient 没有定义这些值,它将采用默认值,该值为 10000 毫秒(您可以在此处的第 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);

于 2016-03-17T19:39:31.143 回答