2016-02-23 83 views
2

我們正在使用Netflix feign連接到下游客戶端,但我們的request.options連接和讀取超時不起作用。Feign builder超時無效

這是我們如何傳遞參數給建設者

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

我們已成立readTimeout和ConnectionTimeout爲1秒。 但是我們看到即使目標需要超過1秒的響應時間,它也不會超時並且不斷嘗試連接。

回答

0

你的請求選項配置不工作,因爲您定義OkHttpClient,根據假死的文檔:

OkHttpClient指導假死的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);

+0

我不知道這是否是在回答時正確的,但現在是錯誤的:如果你看看假死,okttp模塊,你會看到假裝覆蓋OkHttp超時與其選項:https://github.com/OpenFeign/feign/blob/master/okhttp/src/main/java/feign/okhttp/OkHttpClient.java#L146 – dipanda