天天看點

RestTemplate優化

附:SpringCloud之系列彙總跳轉位址

RestTemplateConfig

package com.newland.iot.config;

import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
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.springframework.cloud.client.loadbalancer.LoadBalanced;
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;
import java.util.concurrent.TimeUnit;

@Configuration
public class RestTemplateConfig {

	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.newClientHttpRequestFactory());
	return restTemplate;
	}

	/**
	 * 自定義RestTemplate配置
	 * 1、設定最大連接配接數
	 * 2、設定路由并發數
	 * 3、設定重試次數
	 * @author Hux
	 * @return
	 */
	public static ClientHttpRequestFactory newClientHttpRequestFactory() {
		
		// 長連接配接保持時長30秒
		PoolingHttpClientConnectionManager pollingConnectionManager = new PoolingHttpClientConnectionManager(
				30, TimeUnit.SECONDS);
		// 最大連接配接數
		pollingConnectionManager.setMaxTotal(3000);
		// 單路由的并發數
		pollingConnectionManager.setDefaultMaxPerRoute(100);
		HttpClientBuilder httpClientBuilder = HttpClients.custom();
		httpClientBuilder.setConnectionManager(pollingConnectionManager);
		// 重試次數2次,并開啟
		httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(2,
				true));
		// 保持長連接配接配置,需要在頭添加Keep-Alive
		httpClientBuilder
				.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy());
		HttpClient httpClient = httpClientBuilder.build();
		// httpClient連接配接底層配置clientHttpRequestFactory
		HttpComponentsClientHttpRequestFactory clientHttpRequestFactory =
		new HttpComponentsClientHttpRequestFactory(httpClient);
		clientHttpRequestFactory.setReadTimeout(5000);// ms
		clientHttpRequestFactory.setConnectTimeout(15000);//
		return clientHttpRequestFactory;
	}
}
           

附:SpringCloud之系列彙總跳轉位址

繼續閱讀