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