SpringCloud如何实现和测试Ribbon负载均衡配置
1、Ribbon在工作时分成两步:
第一步先选择Eureka Server,它优先选择在同一个区域内负载较少的Server。
第二步再根据用户指定的策略,再从Server取到的服务注册表中选择一个地址。
其中Ribbon提供了多种策略:比如轮询、随机和根据响应时间加权。
我们现在来看一下我们需要实现的项目的整体架构图如下:

2、参考microcloudservice-provider-dept-8001,新建两个提供者微服务,分别命名为:microcloudservice-provider-dept-8002,
microcloudservice-provider-dept-8003。
在父pom文件中加入这两个模块。


3、修改上面两个复制项目的主程序类的启动类名称。

4、新建8002/8003数据库,各自微服务分别连自己的数据库。
DROP DATABASE IF EXISTS cloudDB02;
CREATE DATABASE cloudDB02 CHARACTER SET UTF8;
USE cloudDB02;
DROP TABLE IF EXISTS dept;
CREATE TABLE dept (
dname varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
db_source varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
deptno int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (deptno) USING BTREE
);
insert into dept(dname,db_source) values('开发部',database());
insert into dept(dname,db_source) values('人事部',database());
insert into dept(dname,db_source) values('财务部',database());
insert into dept(dname,db_source) values('市场部',database());
insert into dept(dname,db_source) values('运维部',database());


5、修改8002/8003各自的yml文件,修改端口和数据库连接。
server:
port: 8002
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径
type-aliases-package: com.gwolf.springcloud.entities # 定义所有操作类的别名所在包
mapper-locations: # 所有的mapper映射文件
- classpath:mybatis/mapper/**/*.xml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置当前要使用的数据源的操作类型
driver-class-name: com.mysql.cj.jdbc.Driver # 配置MySQL的驱动程序类
url: jdbc:mysql://localhost:3306/cloudDB02?serverTimezone=UTC # 数据库连接地址
username: root # 数据库用户名
password: root # 数据库连接密码
dbcp2: # 进行数据库连接池的配置
min-idle: 5 # 数据库连接池的最小维持连接数
initial-size: 5 # 初始化提供的连接数
max-total: 5 # 最大的连接数
max-wait-millis: 200 # 等待连接获取的最大超时时间
application:
name: microcloudservice-provider-dept
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: microcloudservice-provider-dept-8002
prefer-ip-address: true
info:
app.name: gwolf-microcloudservice-provider-dept-8002
company.name: www.gwolf.com
build.artifactId: $project.artifactId$
build.version: $project.version$

6、三个部门微服务提供者要对外暴露统一的微服务实例名:
spring:
application:
name: microcloudservice-provider-dept
三个项目的这个名字必须一样。
现在我们来测试Ribbon的负载均衡配置,验证是否是轮询访问了三个部门微服务提供者。
1、启动3个eureka集群
2、启动3个部门微服务提供者
3、启动部门微服务消费者。



7、现在我们可以看出ribbon通过消费端已经实现了负载均衡轮询访问了部门提供者。