RestTemplate优化

本文详细介绍SpringCloud中RestTemplate的高级配置方法,包括连接池的管理、连接和读取超时时间的设定、重试策略的实现,以及如何通过自定义HttpComponentsClientHttpRequestFactory来提升HTTP请求的稳定性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

附: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之系列汇总跳转地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎户星座。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值