LINUX浼氶粯璁や繚鐣欓摼鎺?澶╁啀鍏抽棴銆?/div>寤虹珛HTTP閾炬帴鍏跺疄涔熸槸璋冪敤TCL鐨勫崗璁幓寤虹珛錛屽寘鎷紑濮嬬殑鏃跺欐湁涓夋鎻℃墜錛屽叧闂殑鏃跺欐湁鍥涙鎻℃墜銆傚叧闂摼鎺ュ弻鏂歸兘鍙互鍙戣搗銆?br />浣嗚繖浜涢摼鎺ュ彲鑳戒細琚槻鐏鍏蟲帀鑰屼笉閫氱煡寤虹珛閾炬帴鐨勫弻鏂癸紝鍥犳璁劇疆闇璁劇疆閾炬帴鐨勫瓨媧繪湡銆?br />浣跨敤httpClient鐨勯摼鎺ユ睜鏃訛紝瑕佽緗睜涓殑閾炬帴瀛樻椿鏈熸垨璁劇疆瀛樻椿絳栫暐銆?br />媯嫻嬪瓨媧繪湡鍙湪姣忔鍙戦佹暟鎹椂錛屾墠媯嫻嬪彇鍑虹殑閾炬帴鏄惁瓚呰繃瀛樻椿鏈燂紝濡傝秴榪囧垯鍏抽棴銆?br />璁劇疆瀛樻椿鏈熺殑絳栫暐錛?br />
import java.util.concurrent.TimeUnit;
import org.apache.http.HeaderElement;
import org.apache.http.HeaderElementIterator;
import org.apache.http.HttpResponse;
import org.apache.http.conn.ConnectionKeepAliveStrategy;
import org.apache.http.message.BasicHeaderElementIterator;
import org.apache.http.protocol.HTTP;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.Args;
public class MyConnectionKeepAliveStrategy implements ConnectionKeepAliveStrategy{
private int timeToLive;
private TimeUnit timeUnit;
public MyConnectionKeepAliveStrategy(int timeToLive, TimeUnit timeUnit) {
this.timeToLive = timeToLive;
this.timeUnit = timeUnit;
}
@Override
public long getKeepAliveDuration(final HttpResponse response, final HttpContext context) {
Args.notNull(response, "HTTP response");
final HeaderElementIterator it = new BasicHeaderElementIterator(
response.headerIterator(HTTP.CONN_KEEP_ALIVE));
while (it.hasNext()) {
final HeaderElement he = it.nextElement();
final String param = he.getName();
final String value = he.getValue();
if (value != null && param.equalsIgnoreCase("timeout")) {
try {
return Long.parseLong(value) * 1000;
} catch(final NumberFormatException ignore) {
//do nothing
}
}
}
return timeUnit.toMillis(timeToLive);
}
}
銆奌ttpClient瀹樻柟鏂囨。銆?.6 榪炴帴緇存寔瀛樻椿絳栫暐
http://ifeve.com/httpclient-2-6/httpclient榪炴帴姹犵鐞嗭紝浣犵敤瀵逛簡錛?br />
http://ifeve.com/http-connection-pool/HttpClient榪炴帴姹犵殑涓浜涙濊?br />
https://zhuanlan.zhihu.com/p/85524697HTTP鍗忚鐨凨eep-Alive 妯″紡
https://www.jianshu.com/p/49551bda6619
]]>
- httpClient Connection Pool浣跨敤鐨勬紜Э鍔?/title>http://m.tkk7.com/paulwong/archive/2020/12/29/435757.htmlpaulwongpaulwongTue, 29 Dec 2020 01:36:00 GMThttp://m.tkk7.com/paulwong/archive/2020/12/29/435757.htmlhttp://m.tkk7.com/paulwong/comments/435757.htmlhttp://m.tkk7.com/paulwong/archive/2020/12/29/435757.html#Feedback0http://m.tkk7.com/paulwong/comments/commentRss/435757.htmlhttp://m.tkk7.com/paulwong/services/trackbacks/435757.htmlimport java.util.concurrent.TimeUnit;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HttpClientConfiguration {
@Bean
public PoolingHttpClientConnectionManager poolingHttpClientConnectionManager() {
PoolingHttpClientConnectionManager result =
new PoolingHttpClientConnectionManager(5, TimeUnit.MINUTES);
result.setMaxTotal(20);
result.setDefaultMaxPerRoute(20);
return result;
}
@Bean
public RequestConfig requestConfig(KycProperties kycProperties) {
return RequestConfig
.custom()
.setConnectionRequestTimeout(kycProperties.getHttpConnectionTimeout())
.setConnectTimeout(kycProperties.getHttpConnectionTimeout())
.setSocketTimeout(kycProperties.getHttpConnectionTimeout())
.build();
}
@Bean
public CloseableHttpClient httpClient(PoolingHttpClientConnectionManager poolingHttpClientConnectionManager, RequestConfig requestConfig) {
return HttpClients
.custom()
.setConnectionManager(poolingHttpClientConnectionManager)
.setDefaultRequestConfig(requestConfig)
.build();
}
}