当前位置: 首页 > news >正文

弃用RestTemplate,RestClient真香!

在Spring框架的发展历程中,RestTemplate作为发起HTTP请求的同步API,曾经扮演着举足轻重的角色。然而,随着技术的不断进步和微服务架构的普及,RestTemplate的局限性逐渐显现,尤其是在处理高并发和异步请求时。因此,Spring框架引入了RestClient,作为RestTemplate的现代化替代方案,其流畅且同步的API设计、可测试性以及对服务发现负载均衡的支持,都使得RestClient成为了新的宠儿。

RestTemplate的局限性
  1. 阻塞性质:RestTemplate是一个阻塞、同步客户端,执行请求的线程会阻塞直到操作完成。这种模型在重负载下可能导致线程池耗尽,增加延迟,限制了系统的可扩展性。

  2. 缺乏反应式编程支持:在基于云的生态系统中,反应式编程日益受到重视,因为它使系统更具响应性、弹性和伸缩性。然而,RestTemplate不支持反应式编程,无法满足现代系统对高性能和低延迟的需求。

  3. 过时的API:RestTemplate是Spring 3中引入的,虽然功能强大,但拥有过多的重载方法,使得API显得臃肿。随着Spring框架的不断演进,更现代、更简洁的API成为了开发者的新追求。

RestClient的崛起

从Spring Framework 6.1和Spring Boot 3.2开始,RestClient正式登上历史舞台。它基于底层的HTTP客户端库(如JDK HttpClient、Apache HttpComponents等)工作,提供了像WebClient一样更现代、流畅的API设计,同时保留了RestTemplate的功能。

  1. 现代化API:RestClient的API设计更加简洁、流畅,避免了RestTemplate中过多的重载方法。这使得代码更加易读、易维护。

  2. 可测试性:RestClient在设计时就考虑了可测试性,使得在单元测试中模拟HTTP交互变得更加容易。这有助于开发者编写更健壮、更可靠的代码。

  3. 服务发现负载均衡:从Spring Cloud 4.1.0开始,RestClient就支持服务发现的负载均衡。这意味着在使用RestClient进行远程调用时,可以自动根据服务名进行负载均衡,提高了系统的可用性和稳定性。

  4. 无需额外依赖:与WebClient相比,RestClient不需要额外的spring-boot-starter-webflux依赖。这使得在项目中引入RestClient更加简单、方便。

RestClient的使用示例

RestClient的使用非常简单,可以通过create()方法或builder()方法来初始化RestClient Bean。以下是一个简单的使用示例:

@Value("${pack.remote.address:http://www.pack.com}")
private String baseURI;@Bean
public RestClient restClient() {return RestClient.create(baseURI);
}// 或者使用builder()方法来设置更复杂的选项
@Bean
public RestClient restClient(CloseableHttpClient httpClient) {return RestClient.builder().baseUrl(baseURI).requestFactory(new HttpComponentsClientHttpRequestFactory(httpClient)).build();
}// 发送GET请求
List<User> list = restClient.get().uri("/users").accept(MediaType.APPLICATION_JSON).retrieve().bodyToList(User.class);// 发送POST请求
User user = new User(666L, "张三", 22);
restClient.post().uri("/users").contentType(MediaType.APPLICATION_JSON).body(user).retrieve().toBodilessEntity();
总结

随着Spring框架的不断演进,RestClient作为RestTemplate的现代化替代方案,以其简洁、流畅、可测试以及支持服务发现负载均衡等特性,赢得了开发者的青睐。在未来的Spring Boot项目中,RestClient将成为发起HTTP请求的首选方案。对于那些还在使用RestTemplate的开发者来说,是时候拥抱RestClient,享受它带来的真香体验了!


http://www.mrgr.cn/news/50739.html

相关文章:

  • 【限免】自动调制识别【附Python代码】
  • Unity动画系统
  • Nvidia HGX B200平台NVLink Switch变化
  • 实用建议!如何为企业选择合适的供应商
  • kubernets(二)
  • Arthas常用的命令(二)--trace
  • 遨游浏览器与谷歌浏览器云同步功能的对比分析
  • 2011年国赛高教杯数学建模D题天然肠衣搭配问题解题全过程文档及程序
  • 回头看以及向后看
  • 虚拟机Windows10系统如何联网
  • lua脚本使用cjson转换json时,空数组[]变成了空对象{}
  • 【DevOps工具篇】Docker的DNS原理
  • 使用TeamViewer远程局域网内的两台电脑
  • Cortex-A55国产处理器_教学实验箱_操作案例分享:5-21 手势识别实验
  • Transformer 的缩放因子为什么需要开平方根
  • 申请书阿拉伯语翻译的特点
  • 一键快捷回复软件助力客服高效沟通
  • AD9680(adc直采芯片)使用说明
  • 2024-10-15 Nuxt3打包部署到Nginx流程
  • 中科星图GVE(AI案例)——AI提取采样区域的水体区域