负载均衡器的功能演示
接下来,笔者将结合实际的代码来演示负载均衡器的功能和效果。
该基础工程是在 spring-cloud-alibaba-nacos-demo
项目的基础上修改的,因为是编写与 LoadBalancer
相关的代码,所以这里把项目名称修改为 spring-cloud-alibaba-load-balance-demo
,root
节点的 pom.xml
文件内容也修改一下。之后复制 nacos-provider-demo
两次,分别命名为 nacos-provider-demo2
和 nacos-provider-demo3
。
root
节点中 pom.xml
文件的最终内容如下:
<modelVersion>4.0.0</modelVersion>
<groupId>ltd.newbee.cloud</groupId>
<artifactId>spring-cloud-alibaba-load-balance-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-alibaba-load-balance-demo</name>
<packaging>pom</packaging>
<description>Spring Cloud Alibaba Load Balance Demo</description>
<modules>
<module>nacos-provider-demo</module>
<module>nacos-provider-demo2</module>
<module>nacos-provider-demo3</module>
<module>nacos-consumer-demo</module>
</modules>
最终的目录结构如图 7-2 所示。

为了与其他章节做区分,把各个模块中 application.properties
配置文件的启动端口号进行一些简单的修改,nacos-consumer-demo
中的 REST
测试类也做了修改,代码如下:
package ltd.newbee.cloud.api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
public class LoadBalancerTestController {
@Resource
private RestTemplate restTemplate;
private final String SERVICE_URL = "http://newbee-cloud-goods-service";
// 测试 LoadBalancer 负载均衡
@GetMapping("/loadBalancerTest")
public String loadBalancerTest() {
return restTemplate.getForObject(SERVICE_URL + "/goodsServiceTest",String.class);
}
}
接下来,需要启动 Nacos Server
,之后依次启动这四个项目。如果未能成功启动,则开发人员需要查看控制台中的日志是否报错,并及时确认问题和修复。启动成功后进入 Nacos
控制台,单击 “服务管理” 中的服务列表,可以看到列表中已经存在三条 newbee-cloud-goods-service
的服务信息和一条 newbee-cloud-goods-service-consumer
的信息,如图 7-3 所示。如果实例的数量不对,也需要检查哪里出了问题。

打开浏览器,验证负载均衡器的功能,在地址栏中输入如下地址:
http://localhost:8105/loadBalancerTest
第一次访问后,结果如图 7-4 所示。

此时得到的结果是 8101
实例上返回的。重复访问会依次得到 8102
实例和 8103
实例上的数据响应,如图 7-5 所示。

在后续的重复请求中,会按照这个顺序轮询下去,分别获得这三个实例的数据响应。当然,读者在进行功能测试时,得到的顺序可能和笔者演示的顺序不同。笔者在做测试时得到的轮询顺序是 8101→8102→8103,读者在进行功能演示时获取的顺序可能是 8102→8103→8101 或 8103→8102→8101,这是正常现象。注意一旦顺序确定,之后就一直以一个顺序轮询下去了。