package com.idoipo.ibt.config; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpRequestInterceptor; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; 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.DefaultHttpRequestRetryHandler; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HttpContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.DefaultResponseErrorHandler; import org.springframework.web.client.RestTemplate; import java.io.IOException; /** * Created by Jemmy on 2016/12/1. */ @Configuration @SuppressWarnings("unused") public class WebConfiguration { private Logger logger= LoggerFactory.getLogger(WebConfiguration.class); @Value("${com.idoipo.httpcomponent.maxconnperroute}") private int maxConnPerRoute; @Value("${com.idoipo.httpcomponent.maxconntotal}") private int maxConnTotal; @Value("${http.agent}") private String userAgent; //参考微信OA,使用HttpCommponent @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory){ RestTemplate restTemplate=new RestTemplate(factory); restTemplate.setErrorHandler(new RestClientResponseErrorHandler()); return restTemplate; } @Bean public HttpClient httpClient(){ HttpClientBuilder builder= HttpClients.custom(); PoolingHttpClientConnectionManager connectionManager=new PoolingHttpClientConnectionManager(RegistryBuilder.<ConnectionSocketFactory>create() .register("http", PlainConnectionSocketFactory.getSocketFactory()) .register("https", SSLConnectionSocketFactory.getSocketFactory()) .build()); builder.setConnectionManager(connectionManager); builder.useSystemProperties(); builder.setRetryHandler(new DefaultHttpRequestRetryHandler(5,false)); //请求配置 RequestConfig.Builder requestConfigBuilder=RequestConfig.copy(RequestConfig.DEFAULT); requestConfigBuilder.setConnectTimeout(1000*120); requestConfigBuilder.setConnectionRequestTimeout(1000*120); requestConfigBuilder.setSocketTimeout(1000*150); builder.setUserAgent(userAgent); builder.setDefaultRequestConfig(requestConfigBuilder.build()); builder.setMaxConnPerRoute(maxConnPerRoute); builder.setMaxConnTotal(maxConnTotal); builder.addInterceptorLast(new HttpRequestInterceptor() { public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException { request.removeHeaders(HTTP.CONN_DIRECTIVE); } }); //禁用cookie及认证缓存 builder.disableAuthCaching(); builder.disableCookieManagement(); //打印client配置 logger.debug("Http Client Configuration:{}",requestConfigBuilder.build().toString()); return builder.build(); } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory(){ HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient()); factory.setReadTimeout(5000);//ms factory.setConnectTimeout(15000);//ms return factory; } class RestClientResponseErrorHandler extends DefaultResponseErrorHandler{ @Override public void handleError(ClientHttpResponse response) throws IOException { throw new IOException("第三方服务调用时,发生错误"); } @Override protected boolean hasError(HttpStatus statusCode) { return statusCode.series() == HttpStatus.Series.SERVER_ERROR; } } }
原文地址:https://www.cnblogs.com/keepMoveForevery/p/10400162.html
时间: 2024-11-08 18:51:51