Spring Cloud Alibaba入门教程-3.2【微服务负载均衡器LoadBalancer】

本文介绍了Spring Cloud LoadBalancer作为官方推荐的客户端负载均衡器,替代Ribbon。详细讲解了如何通过RestTemplate整合LoadBalancer,包括引入依赖、使用@LoadBalanced注解以及实际应用。此外,还提到了WebClient作为另一个非阻塞的响应式编程Http客户端工具。

1. 什么是Spring Cloud LoadBalancer

Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器, 用来替代Ribbon。
Spring官方提供了两种负载均衡的客户端:
RestTemplate
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。默认情况下,RestTemplate默认依赖jdk的HTTP连接工具。
WebClient
WebClient是从Spring WebFlux 5.0版本开始提供的一个非阻塞的基于响应式编程的进行Http请求的客户端工具。它的响应式编程的基于Reactor的。WebClient中提供了标准Http请求方式对应的get、post、put、delete等方法,可以用来发起相应的请求

2. RestTemplate整合LoadBalancer

1)引入依赖

1 <!‐‐ LoadBalancer ‐‐> 
2 <dependency> 
3 <groupId>org.springframework.cloud</groupId> 
4 <artifactId>spring‐cloud‐starter‐loadbalancer</artifactId> 
5 </dependency> 
6
7 <!‐‐ 提供了RestTemplate支持 ‐‐> 
8 <dependency> 
<think> 我们正在讨论的是Spring Cloud LoadBalancer相关的两个依赖:spring-cloud-loadbalancerspring-cloud-starter-loadbalancer。 根据引用[3]和[4]的内容,我们知道在Spring Cloud Hoxton.M2版本之后,Feign不再使用Ribbon,而是使用spring-cloud-loadbalancer。 问题:spring-cloud-loadbalancerspring-cloud-starter-loadbalancer的对比。 分析: 在Spring Cloud生态中,通常有两种类型的依赖: 1. 核心库(例如:spring-cloud-loadbalancer):提供核心功能,但不包含自动配置等便利的启动器特性。 2. Starter(例如:spring-cloud-starter-loadbalancer):是一个启动器,它包含核心库以及自动配置,还可能包含必要的依赖传递。 因此,我们可以这样理解: - spring-cloud-loadbalancer:是负载均衡器的核心实现,提供了负载均衡的接口和基本实现。 - spring-cloud-starter-loadbalancer:是一个启动器,它集成了spring-cloud-loadbalancer,并且提供了自动配置,使得在Spring Boot应用中可以开箱即用。 具体区别: 1. 功能范围: - spring-cloud-loadbalancer:只包含核心功能,如`LoadBalancerClient`接口及其实现,负载均衡算法等。 - spring-cloud-starter-loadbalancer:除了包含核心库外,还提供了自动配置,简化了使用方式(例如自动创建负载均衡的`WebClient.Builder`或`RestTemplate`)。 2. 使用场景: - 如果你已经有一个复杂的配置,并且希望手动管理负载均衡器的配置,那么你可能直接使用核心库(spring-cloud-loadbalancer)并自行配置。 - 对于大多数情况,我们使用starter(spring-cloud-starter-loadbalancer)因为它可以自动配置,简化开发。 3. 依赖传递: - spring-cloud-starter-loadbalancer会传递依赖spring-cloud-loadbalancer,所以使用starter时不需要再单独引入核心库。 4. 版本兼容性: - 根据引用[3],在Hoxton.M2版本之后,Spring Cloud移除了对Ribbon的默认支持,转而使用spring-cloud-loadbalancer。因此,如果你使用的是新版本(Hoxton.M2及以上),并且需要负载均衡功能,那么你应该引入spring-cloud-starter-loadbalancer。 5. 错误解决: - 引用[4]中提到,如果出现错误信息“Did you forget to include spring-cloud-starter-loadbalancer?”,则是因为缺少这个启动器依赖。 总结: 在Spring Cloud项目中,我们通常使用spring-cloud-starter-loadbalancer,因为它提供了开箱即用的自动配置。而spring-cloud-loadbalancer是核心库,如果你只需要核心功能并且希望完全手动配置,那么可以选择它。但在实际开发中,我们推荐使用starter。 引用说明: 根据用户提供的引用,我们参考了引用[3]和[4]来确认版本变化和依赖关系。 下面生成相关问题: </think> ### Spring Cloud LoadBalancerSpring Cloud Starter Loadbalancer 对比分析 #### 1. **核心定位差异** | **组件** | **定位** | **依赖关系** | |-----------------------------------|--------------------------------------------------------------------------|-------------------------------------------| | `spring-cloud-loadbalancer` | 负载均衡核心库,提供基础接口和算法实现<br>(如 `LoadBalancerClient`)[^1] | 不包含自动配置 | | `spring-cloud-starter-loadbalancer` | **启动器**,封装核心库 + 自动配置 + 依赖管理<br>实现开箱即用[^3][^4] | 依赖传递包含 `spring-cloud-loadbalancer` | #### 2. **功能实现对比** ```mermaid graph TD A[Starter-loadbalancer] --> B[自动配置] A --> C[健康检查] A --> D[服务发现集成] B --> E[自动创建 LoadBalancerClient] C --> F[自动剔除异常实例] D --> G[与 Nacos/Eureka 无缝协作] H[Core-loadbalancer] --> I[基础接口] I --> J[RoundRobin/随机等算法] I --> K[自定义扩展点] ``` #### 3. **版本演进关键点 - **Hoxton.M2 版本分水岭** - 旧版本:Spring Cloud Feign 默认集成 Ribbon - **新版本(≥Hoxton.M2)**: ```xml <!-- 必须显式添加 starter-loadbalancer --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> ``` 否则报错: `No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?`[^3][^4] #### 4. **使用场景建议** | **场景** | **推荐依赖** | **原因** | |------------------------------------|----------------------------------|--------------------------------------------------------------------------| | 基础负载均衡需求 | starter-loadbalancer | 自动配置简化开发,避免手动初始化[^2] | | 深度定制负载均衡逻辑 | core-loadbalancer | 直接使用接口扩展 `ReactorServiceInstanceLoadBalancer`[^1] | | Alibaba Cloud 体系 | starter-loadbalancer + 排除Ribbon | Nacos 默认含 Ribbon,需排除冲突:`<exclusion>spring-cloud-starter-netflix-ribbon</exclusion>`[^3] | #### 5. **配置示例对比 **Starter 自动配置(Gateway 集成)** ```yaml spring: cloud: gateway: routes: - id: user-service uri: lb://user-service # 自动启用负载均衡 predicates: - Path=/api/users/** ``` **Core 库手动配置** ```java @Bean public LoadBalancerClient loadBalancer() { return new BlockingLoadBalancerClient( new RoundRobinLoadBalancer(serviceInstanceListSupplier()) ); } ``` > **💡 最佳实践**: > 生产环境优先使用 `spring-cloud-starter-loadbalancer`,避免兼容性问题[^4],需确保版本匹配: > ```xml > <properties> > <spring-cloud.version>2021.0.3</spring-cloud.version> > </properties> > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值