一、简介
Ribbon:springcloud提供的负载均衡组件。
二、对谁的负载均衡
1、consumer访问provider的负载均衡
三、Ribbon的使用
1、注意(依赖、策略):
-
关于依赖:如果已经引入了feign或者网关的依赖。则无需再单独添加ribbon的依赖
-
关于负载均衡策略:默认策略为轮询,如果没必要无需进行任何配置
2、依赖
一、父项目 pom.xml
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<java.version>1.8</java.version>
<!-- springboot的版本 -->
<spring-boot.version>2.3.2.RELEASE</spring-boot.version>
<!-- springcloud的版本 -->
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
<!-- alibaba推出springcloud的对应版本 -->
<spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
</properties>
<!-- 项目打包方式 -->
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<!-- spring boot依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- alibaba推出的spring-cloud依赖的父依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
二、consumer项目 pom.xml文件
<dependencies>
<!-- springboot core 启动依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- springboot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- alibaba-nacos注册中心客户端支持依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 导入feign组件或网关组件都可以里面自动依赖了Ribbon组件 -->
<!-- feign组件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 也可以直接导入ribbon -->
<!--
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
-->
</dependencies>
三、provider项目 pom.xml文件
<dependencies>
<!-- springboot core 启动依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- springboot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- alibaba-nacos注册中心客户端支持依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
3、配置文件.yml
一、provider的pom.xml配置文件
# idea下同一个项目启动多个,集群操作
server:
port: 8181
spring:
profiles: no1
---
server:
port: 8182
spring:
profiles: no2
---
server:
port: 8183
spring:
profiles: no3
---
spring:
application:
name: test-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
# 所属的命名空间:填写的是命名空间id
namespace: asidhasudh-2sada-8hjbahas
# 所属命名空间的组名称
group: user
# 数据源配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/market?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username: root
password: root
druid:
driver-class-name: com.mysql.jdbc.Driver
启动完成nacos注册中心的样子
二、consumer的pom.xml配置文件
server:
port: 8183
spring:
application:
name: test-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
# 所属的命名空间:填写的是命名空间id
namespace: asidhasudh-2sada-8hjbahas
# 所属命名空间的组名称
group: user
# 配置对provider的负载均衡策略
test-provider: # 往注册中心注册的名字
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
# 默认RoundRobinRule,轮询
# WeightedResponseTimeRule,根据影响权重分配,可能会超时
# RandomRule:随机分配
# 还有其他的请上网搜索
4、访问
直接访问Consumer 访问层就行了。