我正在使用httpClient版本4.5來連接我們的外部供應商站點。我們不需要任何連接池或持久連接,所以我使用BasicHttpClientConnectionManager創建HttpClient。Apache HttpClient 4.5:連接重置
這對最小數量的請求工作正常,但如果我測試1TPS 1小時,在測試結束時,我們開始看到間歇性連接重置。 (猜測請求計數> 100)
I/O異常(java.net.SocketException異常)處理請求時捕獲{S} - >https://apiURL:443:連接重置
請發現下面的代碼段用於使連接。
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), new X509TrustManager[] { new DefaultTrustManager() }, new SecureRandom());
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new String[] { "TLSv1.2" }, null,SSLConnectionSocketFactory.getDefaultHostnameVerifier());
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("https", sslsf).register("http", new PlainConnectionSocketFactory()).build();
HttpClientConnectionManager connectionManager = new BasicHttpClientConnectionManager(socketFactoryRegistry);
HttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(1, false);
RequestConfig defaultRequestConfig = RequestConfig.custom().setSocketTimeout(Integer.parseInt(30000)).setConnectTimeout(Integer.parseInt(30000)).setConnectionRequestTimeout(30000).setCookieSpec(CookieSpecs.STANDARD).build();
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager).setDefaultRequestConfig(defaultRequestConfig).setRetryHandler(retryHandler).evictExpiredConnections().build();
HttpPost httpPost = new HttpPost(<endpoint>);
httpPost.setEntity(new UrlEncodedFormEntity(requestData));
httpResponse = httpClient.execute(httpPost);
我看到針對報告的類似問題的修復已經可用於版本4.5。 (Ref:https://issues.apache.org/jira/browse/HTTPCLIENT-1655)由Oleg提供
如果是這樣的話,不知道爲什麼我仍然面臨這個問題。有人可以幫助解決這個問題。
謝謝!
您是否考慮過對端點重置連接的可能性? – oleg
感謝您的回覆,[Oleg](https://stackoverflow.com/users/335638/oleg)。從我們在這裏與網絡團隊一起運行的跟蹤中,可以看到當Destination主機向我們請求ACK時,我們的服務器Source已經發送了很多重置(RST)。所以,這就是我試圖弄清楚它是否與我們使用的HttpClient有關的問題。 – user1347244
在這一點上,我們所做的就是將重試次數增加到3次(使用DefaultHttpRequestRetryHandler),因爲我們注意到,在重試後成功處理了一些由連接重置錯誤命中的請求。但是,這似乎並不適合我們面臨的問題。 – user1347244