一、添加依赖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(); } }