我正在使用httpClient 4.5版本连接我们的外部供应商网站。我们不需要任何连接池或持久连接,所以我正在使用BasicHttpClientConnectionManager创建HttpClient。
这对于最小数量的请求可以正常工作,但如果我测试1TPS 1小时,到测试结束时,我们开始看到间歇性的连接重置。(猜测请求计数 > 100)
在处理对{s}->https://apiURL:443的请求时捕获了I/O异常(java.net.SocketException):连接重置。
请查找下面的代码片段以进行连接。
我看到一个类似问题的修复已经在4.5版本中提供了。(参考:https://issues.apache.org/jira/browse/HTTPCLIENT-1655)该修复由Oleg提供。
这对于最小数量的请求可以正常工作,但如果我测试1TPS 1小时,到测试结束时,我们开始看到间歇性的连接重置。(猜测请求计数 > 100)
在处理对{s}->https://apiURL:443的请求时捕获了I/O异常(java.net.SocketException):连接重置。
请查找下面的代码片段以进行连接。
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版本中提供了。(参考:https://issues.apache.org/jira/browse/HTTPCLIENT-1655)该修复由Oleg提供。
如果是这样的话,我不确定为什么我仍然遇到这个问题。请问有人能帮忙吗?
谢谢!