Webservicetemplate PoolighttpClientConnectionManager-TTL构造函数和;相关问题
我正在创建HttpComponentMessageSender bean,如下所示Webservicetemplate PoolighttpClientConnectionManager-TTL构造函数和;相关问题,webservicetemplate,Webservicetemplate,我正在创建HttpComponentMessageSender bean,如下所示 @Bean public HttpComponentsMessageSender reservationHttpComponent() { HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender(); httpComponentsMessage
@Bean
public HttpComponentsMessageSender reservationHttpComponent() {
HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender();
httpComponentsMessageSender.setConnectionTimeout(reservationConnectionTimeOut);
httpComponentsMessageSender.setReadTimeout(reservationReadTimeOut);
return httpComponentsMessageSender;
}
这里我遇到了间歇性的读取超时问题——比如,如果我在30分钟的休息后第一次尝试读取超时,之后所有进一步的事务都会成功。如果再次中断30分钟,则第一次交易再次失败,出现读取超时问题,然后所有后续交易均成功
我试图修复如下代码-
@Bean
public HttpComponentsMessageSender reservationHttpComponent() {
RequestConfig requestBuilder = RequestConfig.custom()
.setSocketTimeout(reservationReadTimeOut)
.setConnectionRequestTimeout(reservationConnectionTimeOut)
.setConnectTimeout(reservationConnectionTimeOut)
.setCircularRedirectsAllowed(false)
.build();
org.apache.http.client.HttpClient httpClient = HttpClientBuilder.create()
.setConnectionManager(getConnManager())
.addInterceptorFirst(new HttpComponentsMessageSender.RemoveSoapHeadersInterceptor())
.setDefaultRequestConfig(requestBuilder)
.build();
HttpComponentsMessageSender messageSender = new HttpComponentsMessageSender();
messageSender.setHttpClient(httpClient);
return messageSender;
}
private PoolingHttpClientConnectionManager getConnManager() {
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setDefaultMaxPerRoute(connectionManagerDefaultMaxPerRoute);
connectionManager.setMaxTotal(connectionManagerMaxTotal);
connectionManager.setDefaultSocketConfig(SocketConfig.custom()
.setSoTimeout(reservationReadTimeOut).build());
return connectionManager;
}
上面已经解决了读取超时问题,但我已经开始解决下面的问题-
message:Error Occurred While Retrieving Reservation - I/O error: Timeout waiting for connection from pool; nested exception is org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
我正在寻找修复程序,然后尝试使用TTL初始化PoollightTPClientConnectionManager-
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(1, TimeUnit.MINUTES)
然后,我运行了多性能jmx脚本,在我的服务上启动了70-80个TPS,这些TPS包含上述外部依赖代码,看起来都不错
但是,我不确定在PoollightTPClientConnectionManager构造函数中使用TTL是否是非常合适的解决方案。。因此,我在这里寻找建议,看看这个解决方案是否会导致任何进一步的问题,或者这可能是一个比这更好的方法