Spring之RestTemplate

RestTemplate

RestTemplate是一个执行http请求的同步阻塞式工具类,它仅仅式在HTTP客户端库的基础上封装了更加简单易用的模板方法API,方便程序员用发起网络请求和处理

1.RestTemplate是Spring提供的访问Rest服务器的客户端

2.底层通过使用java.net包下的实现创建HTTP请求

3.通过使用ClientHttpRequetFactory指定不同的HTTP请求方式,主要提供了两种实现方式

(1)SimpleClientHttpRequestFactory(默认)

-底层使用了J2SE提供的方式,就是java.net包所提供的方式,去创建底层的http请求连接

-主要createRequest方法,每次都会创建一个新的连接,每次创建连接都会造成极大的资源浪费,而且如果连接不能及时释放资源,会因为无法建立新的连接而导致后面的请求阻塞

 (2) HttpComponentClientHttpRequestFactory

底层使用的是HttpClient访问远程的Http服务

Spring的restTemplate对httpClient进行了封装,而httpClient是支持池化的,通过http连接池可以减少连接的建立和释放时间,提高http请求的性能

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder, ClientHttpRequestFactory httpRequestFactory){
    RestTemplate restTemplate = builder.build();
    //使用连接池
    restTemplate.setInterceptors(Collections.singletonList(restTemplateLoggingInterceptor));
    restTemplate.setErrorHandler(restTemplateErrorHandler);
    restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(httpRequestFactory));
    return restTemplate;
}

@Bean
public ClientHttpRequestFactory clientHttpRequestFactory(){
    SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
    simpleClientHttpRequestFactory.setConnectTimeout(150000);
    simpleClientHttpRequestFactory.setReadTimeout(15000);
    return simpleClientHttpRequestFactory;
}

HttpClient

代码复杂,还需要进行资源回收,不建议直接使用,一般是封装为HttpClient工具类使用的。

RestTemplate和WebClient的区别

WebClient是一种非阻塞,响应式的客户端,用于执行HTTP请求,在Spring5.0引入,支持同步,异步和流式场景,用于取代RestTemplate,

1.RestTemplate是同步阻塞的:这意味着客户端线程在受到服务器端的响应之前,会一直 被阻塞着。当访问大量响应速度较慢的服务的时候,数量众多的阻塞线程将占用大量的服务器资源,严重影响性能。

WebClient是异步阻塞的,在等待响应返回的时候不会阻塞正在执行的线程,只有当响应就绪的时候,才会产生通知。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值