负载均衡器的功能演示

接下来,笔者将结合实际的代码来演示负载均衡器的功能和效果。

该基础工程是在 spring-cloud-alibaba-nacos-demo 项目的基础上修改的,因为是编写与 LoadBalancer 相关的代码,所以这里把项目名称修改为 spring-cloud-alibaba-load-balance-demoroot 节点的 pom.xml 文件内容也修改一下。之后复制 nacos-provider-demo 两次,分别命名为 nacos-provider-demo2nacos-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 所示。

image 2025 04 16 15 00 46 665
Figure 1. 图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 所示。如果实例的数量不对,也需要检查哪里出了问题。

image 2025 04 16 15 07 08 306
Figure 2. 图7-3 Nacos 控制台中的 “服务列表” 页面

打开浏览器,验证负载均衡器的功能,在地址栏中输入如下地址:

http://localhost:8105/loadBalancerTest

第一次访问后,结果如图 7-4 所示。

image 2025 04 16 15 08 13 297
Figure 3. 图7-4/loadBalancerTest 请求的访问结果

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

image 2025 04 16 15 08 43 859
Figure 4. 图7-5 多次请求 /loadBalancerTest 的访问结果

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