一、去掉 Nacos Config 加载:
1、修改 Nacos中的 nacos-user-dev.yaml 配置,去掉 server.port: 8019
2、或者不使用 Nacos Config 配置:
- 删除或者注释掉bootstrap.properties中的Config配置
#spring.cloud.nacos.config.server-addr=192.168.100.213:8848 #spring.cloud.nacos.config.file-extension=yaml #spring.cloud.nacos.config.prefix=nacos-user
- 删除或者注释掉pom.xml中的nacos-config
<!-- <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> -->
二、参照《STS多端口多实例启动SpringBoot服务》,启动三个User实例(8887、8888、8889):
注:这时检查Nacos服务列表的nacos-user服务,会看到实例数为3。
三、使用 DiscoveryClient 配合 RestTemplate 实现自定义负载均衡:
修改前面创建的Index模块:
1、修改pom.xml,添加alibaba-nacos-discovery依赖:
<dependency> <!-- 服务注册与发现 --> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
2、添加 bootstrap.properties配置文件,并填入如下配置信息:
spring.cloud.nacos.discovery.server-addr=192.168.100.213:8848
3、修改IndexController类,将前面使用IP+端口访问服务,改成使用DiscoveryClient获取服务访问:
@Controller public class IndexController { @Autowired private RestTemplate restTemplate; @Autowired private DiscoveryClient discoveryClient; @GetMapping({ "", "/" }) public String index(Model m) { // 1、获取所有服务,这里能获得3个nacos-user服务 List<ServiceInstance> instances = discoveryClient.getInstances("nacos-user"); // 2、使用随机数为索引,取其中一个服务 int index = new Random().nextInt(instances.size()); ServiceInstance serviceInstance = instances.get(index); // 3、获取一个服务的IP+端口,并拼接成服务URL,供RestTemplate使用 String url_format = "http://%s:%i/user/2"; String url = String.format(url_format, serviceInstance.getHost(), serviceInstance.getPort()); // 4、打印URL,检查是否随机访问不同实例 System.out.println("******URL:" + url); // 通过restTemplate调用用户微服务 Object obj = restTemplate.getForObject(url, String.class); m.addAttribute("test", obj); return "index"; } }
4、启动IndexApplication后,刷新多次访问,出现如下结果,即达到了简单的负载均衡效果: