只是在pom.xml文件中添加了spring-cloud-starter-loadbalancer依赖并且在RestTemplate类中添加了一个@LoadBalance的注解。这就是另外一种负载均衡的实现方案
Spring Cloud LoadBalancer 介绍
这种方案有什么优点呢?
- 减少整个系统的复杂度,不需要额外部署负载均衡软件。
- 可以减少不必要的网络开销,因为请求不需要额外经过Nginx等负载均衡软件的一层转发。可用的目标实例信息都存储在本实例的serviceInfoMap变量中,选择其中一个直接发起请求即可。
负载均衡器的功能演示
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>
为了与其它章节做一个区分,把各个Module中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,然后依次启动这4个项目。如果未能成功启动,开发者需要查看控制台中的日志是否报错,并及时确认问题和修复。启动成功后进入Nacos控制台,点击“服务管理”中的服务列表,可以看到列表中已经存在三条newbee-cloud-goods-service的服务信息和一条newbee-cloud-goods-service-consumer的信息
http://localhost:8105/loadBalancerTest