一、添加依賴java
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.9</version> <scope>compile</scope> </dependency>
二、配置web
import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; /** * http請求配置 */ @Configuration public class RestTemplateConfig { @Bean public RestTemplate httpRestTemplate() { ClientHttpRequestFactory factory = httpRequestFactory(); RestTemplate restTemplate = new RestTemplate(factory); // 能夠添加消息轉換 //restTemplate.setMessageConverters(...); // 能夠增長攔截器 //restTemplate.setInterceptors(...); return restTemplate; } public ClientHttpRequestFactory httpRequestFactory() { return new HttpComponentsClientHttpRequestFactory(restTemplateConfigHttpClient()); } public HttpClient restTemplateConfigHttpClient() { Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create() .register("http", PlainConnectionSocketFactory.getSocketFactory()) .register("https", SSLConnectionSocketFactory.getSocketFactory()) .build(); PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry); // 設置整個鏈接池最大鏈接數 根據本身的場景決定 // todo 後面調整從配置中心獲取 connectionManager.setMaxTotal(200); // 路由是對maxTotal的細分 // todo 後面調整從配置中心獲取 connectionManager.setDefaultMaxPerRoute(100); RequestConfig requestConfig = RequestConfig.custom() // 服務器返回數據(response)的時間,超過該時間拋出read timeout // todo 後面調整從配置中心獲取 .setSocketTimeout(10000) // 鏈接上服務器(握手成功)的時間,超出該時間拋出connect timeout // todo 後面調整從配置中心獲取 .setConnectTimeout(5000) // 從鏈接池中獲取鏈接的超時時間,超過該時間未拿到可用鏈接, // 會拋出org.apache.http.conn.ConnectionPoolTimeoutException: // Timeout waiting for connection from pool // todo 後面調整從配置中心獲取 .setConnectionRequestTimeout(5000) .build(); return HttpClientBuilder.create() .setDefaultRequestConfig(requestConfig) .setConnectionManager(connectionManager) .build(); } }