1. 历史原因和向后兼容性

 RestTemplate 是 Spring 框架中早期用于发起 REST 请求的主流方式,很多现有的 Spring Cloud 项目已经广泛使用 RestTemplate。为了保持向后兼容性,Spring Cloud 保留了对 RestTemplate 的负载均衡支持。

    当 Spring Cloud 负载均衡模块(如 Ribbon)最初引入时,WebClient 还没有成为主流,开发者更多地使用 RestTemplate,因此优先提供了 RestTemplate 的负载均衡支持。

2. 同步 vs. 异步编程模型

     RestTemplate 是一种基于同步阻塞的客户端调用方式,适合简单的请求/响应场景,且当它成为主流时,异步编程模型还没有广泛普及。

     WebClient 是基于 Spring WebFlux 的异步非阻塞 HTTP 客户端,提供了更强的反应式编程支持。它在后来的 Spring 5.x 版本中引入,目的是支持响应式编程模型。由于它是后期加入的,因此早期的 Spring Cloud 没有将 WebClient 作为首选的负载均衡实现工具。

3. 负载均衡的实现

     在 RestTemplate 中,通过 @LoadBalanced 注解,Spring Cloud 会自动配置负载均衡的拦截器,这样 RestTemplate 可以通过服务名(如 http://service-name)进行请求,然后由 Ribbon 或 Spring Cloud LoadBalancer 实现客户端负载均衡。

  WebClient 的负载均衡支持也是可以通过 @LoadBalanced 实现的。实际上,WebClient 是现代 Spring 应用程序的推荐使用方式,因为它支持异步和反应式的特性,特别是在高并发和大规模微服务场景中。

4. WebClient 的推荐使用

      虽然 RestTemplate 仍然被支持,但 Spring 官方自 Spring 5.x 以来,更加推荐使用WebClient,因为它更现代化并支持非阻塞和响应式编程,这对提升性能和效率非常重要。在新的 Spring Cloud 版本中,也为 WebClient 提供了和 RestTemplate 一样的负载均衡功能支持。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐