由于 Spring Cloud LoadBalancer 是一个客户端负载均衡组件,在学习它之前,我们需要准备一下环境,提供注册中心和用户服务。环境如下:
注册中心:使用 Eureka 实现注册中心
用户服务:简单实现一个用户服务,模拟一些数据,暴露对用户信息的 CRUD 操作的 Restful 风格接口。
环境结构如下图:

环境的项目结构如下:

其中:
eureka_server:提供注册中心功能
user_service:用户服务
点击下载(
springcloud_loadbalancer_demo.zip)项目代码,后续将基于该项目学习 Spring Cloud LoadBalancer 相关知识。
如果你成功下载项目代码后,可以通过两种方式部署服务,分别如下:
直接使用 IDEA 启动注册中心,如下图:
(1)启动 EurekaServer 服务,不需要做任何配置:

(2)启动用户服务(UserService),设置 JVM 参数 -DnodeName=node1 -Dserver.port=7001,如下图:

(3)启动用户服务(UserService),设置 JVM 参数 -DnodeName=node2 -Dserver.port=7002,如下图:

(4)启动用户服务(UserService),设置 JVM 参数 -DnodeName=node3 -Dserver.port=7003,如下图:

所有服务启动后,如下图:

解压上面下载的项目代码,你会发现 eureka_server 和 user_service 目录下均存在 README.MD 和 Dockerfile 文件,其中:
Dockerfile 文件用来快速构建 Docker 镜像
README.MD 文件提供了构建镜像和创建容器的帮助信息
注意:在执行下面操作前,请确保你已经成功安装了 Docker 服务。
请按照如下步骤执行命令:
第一步:创建名为 my-network 的自定义桥接网络,后续 user-servcie 也将加入到该网络,方便两者通信
docker network create springcloud_network
第二步:构建镜像
sudo docker build -t eureka_server .
第三步:创建容器,启动注册中心服务:
sudo docker run -d -p 8077:8077 --network springcloud_network --name eureka-server eureka_server:latest
注意:如果还没有构建 eureka_server,请先构建 eureka_server。
请按照如下步骤执行命令:
第一步:构建镜像
sudo docker build -t user_service .
第二步:根据上面构建的镜像创建容器,启动多三个用户服务
# 服务1 sudo docker run -d -p 7001:7001 --network springcloud-network \ -e JAVA_OPTS="-DnodeName=node1 -Dserver.port=7001" \ -e SPRING_PROFILES_ACTIVE=docker \ --name user-service1 user_service:latest && sudo docker logs -f user-service1 # 服务2 sudo docker run -d -p 7002:7002 --network springcloud-network \ -e JAVA_OPTS="-DnodeName=node2 -Dserver.port=7002" \ -e SPRING_PROFILES_ACTIVE=docker \ --name user-service2 user_service:latest && sudo docker logs -f user-service2 # 服务3 sudo docker run -d -p 7003:7003 --network springcloud-network \ -e JAVA_OPTS="-DnodeName=node3 -Dserver.port=7003" \ -e SPRING_PROFILES_ACTIVE=docker \ --name user-service3 user_service:latest && sudo docker logs -f user-service3
成功执行完成上面所有步骤后,服务状态如下图:

打开浏览器访问 http://localhost:8077/ 地址,进入注册中心,如下图:

从上图可以看出,USER-SERVICE 服务有三个实例,分别通过如下地址查看服务中的用户信息:
访问 7001 端口输出的数据如下图:

注意:输出数据最前面的 [node1] 是通过环境变量动态提供,以方便区分数据来自于那个服务,观察负载均衡效果。