我正在使用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