From 492f32d4a85a8cdc3ac6eb0cad2cfb3ee11d3e38 Mon Sep 17 00:00:00 2001 From: tangcent Date: Wed, 14 Apr 2021 19:59:36 +0800 Subject: [PATCH] opti: custom ConnectionManager for build httpClient --- .../main/kotlin/com/itangcent/http/ApacheHttpClient.kt | 9 ++++++++- .../itangcent/suv/http/ConfigurableHttpClientProvider.kt | 8 ++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/common-api/src/main/kotlin/com/itangcent/http/ApacheHttpClient.kt b/common-api/src/main/kotlin/com/itangcent/http/ApacheHttpClient.kt index fc93895d4..558329c67 100644 --- a/common-api/src/main/kotlin/com/itangcent/http/ApacheHttpClient.kt +++ b/common-api/src/main/kotlin/com/itangcent/http/ApacheHttpClient.kt @@ -8,6 +8,7 @@ import com.itangcent.common.spi.SpiUtils import com.itangcent.common.utils.notNullOrEmpty import org.apache.http.HttpEntity import org.apache.http.NameValuePair +import org.apache.http.client.config.CookieSpecs import org.apache.http.client.config.RequestConfig import org.apache.http.client.entity.UrlEncodedFormEntity import org.apache.http.client.methods.RequestBuilder @@ -18,6 +19,7 @@ import org.apache.http.entity.StringEntity import org.apache.http.entity.mime.MultipartEntityBuilder import org.apache.http.impl.client.BasicCookieStore import org.apache.http.impl.client.HttpClients +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager import org.apache.http.impl.cookie.BasicClientCookie import org.apache.http.impl.cookie.BasicClientCookie2 import org.apache.http.message.BasicNameValuePair @@ -40,6 +42,10 @@ open class ApacheHttpClient : HttpClient { this.apacheCookieStore = ApacheCookieStore(basicCookieStore) this.httpClientContext!!.cookieStore = basicCookieStore this.httpClient = HttpClients.custom() + .setConnectionManager(PoolingHttpClientConnectionManager().also { + it.maxTotal = 50 + it.defaultMaxPerRoute = 20 + }) .setDefaultSocketConfig(SocketConfig.custom() .setSoTimeout(30 * 1000) .build()) @@ -47,7 +53,8 @@ open class ApacheHttpClient : HttpClient { .setConnectTimeout(30 * 1000) .setConnectionRequestTimeout(30 * 1000) .setSocketTimeout(30 * 1000) - .build()).build() + .setCookieSpec(CookieSpecs.STANDARD).build()) + .build() } constructor(httpClient: org.apache.http.client.HttpClient) { diff --git a/idea-plugin/src/main/kotlin/com/itangcent/suv/http/ConfigurableHttpClientProvider.kt b/idea-plugin/src/main/kotlin/com/itangcent/suv/http/ConfigurableHttpClientProvider.kt index 261944c6c..acf277f22 100644 --- a/idea-plugin/src/main/kotlin/com/itangcent/suv/http/ConfigurableHttpClientProvider.kt +++ b/idea-plugin/src/main/kotlin/com/itangcent/suv/http/ConfigurableHttpClientProvider.kt @@ -14,6 +14,7 @@ import org.apache.http.client.config.CookieSpecs import org.apache.http.client.config.RequestConfig import org.apache.http.config.SocketConfig import org.apache.http.impl.client.HttpClients +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager @Singleton class ConfigurableHttpClientProvider : AbstractHttpClientProvider() { @@ -33,6 +34,10 @@ class ConfigurableHttpClientProvider : AbstractHttpClientProvider() { val config = readHttpConfig() httpClientBuilder + .setConnectionManager(PoolingHttpClientConnectionManager().also { + it.maxTotal = 50 + it.defaultMaxPerRoute = 20 + }) .setDefaultSocketConfig(SocketConfig.custom() .setSoTimeout(config.timeOut.toMill()) .build()) @@ -40,8 +45,7 @@ class ConfigurableHttpClientProvider : AbstractHttpClientProvider() { .setConnectTimeout(config.timeOut.toMill()) .setConnectionRequestTimeout(config.timeOut.toMill()) .setSocketTimeout(config.timeOut.toMill()) - .build()) - .setDefaultRequestConfig(RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build()) + .setCookieSpec(CookieSpecs.STANDARD).build()) return HttpClientWrapper(ApacheHttpClient(httpClientBuilder.build())) }