Nacos 融合 Spring Cloud可以成为注册配置中心。
- 通过 Nacos Server 和
spring-cloud-starter-alibaba-nacos-discovery
实现服务的注册与发现
。 - 通过 Nacos Server 和
spring-cloud-starter-alibaba-nacos-config
实现配置的动态变更
。
这篇文章中将介绍第1点,Nacos的服务注册与发现。
Nacos的服务领域模型
一,准备两个springboot的项目nacos3001和nacos3002;
这两个项目将会注册到Nacos中,然后利用Nacos的服务注册与发现实现FeginClien的远程过程调用;即3001服务通过fegin掉3002服务;
二, 在3001和3002的工程中引入nacos-discovery服务注册与发现的依赖;
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.9.RELEASE</version>
</dependency>
注意:
这里的依赖包版本有使用的Nacos Server是2.1版本的,你可以参照版本说明#组件版本关系来选择相关版本;
三,配置bootstrap.properties文件
Nacos需要使用bootstrap
的文件来进行Nacos Server的地址的相关配置。这是因为nacos的配置的需要优先级更高的bootstrap来进行文件配置的读取。
server.port = 3001
spring.application.name = nacos3001
#服务发现
#单机Nacos: 这里就只需要配置一个地址
#集群Nacos: 这里有几台nacos就配置几个地址,每个地址之间用逗号分割
spring.cloud.nacos.discovery.server-addr = 127.0.0.1:7480,127.0.0.1:7484,127.0.0.1:7488
由于在上节中配置了nacos的集群我这里就配置集群地址,地址之前逗号分割;3001和3002服务除端口配置一样;
四,添加@EnableDiscoveryClient注解;
通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能;
五,业务代码编写
3001服务测试代码;
@RestController
public class NacosController {
@Autowired
private INacos3002ClientService nacos3002ClientService;
@GetMapping("/get/name")
public String getServiceName(){
return nacos3002ClientService.getServiceName();
}
}
@FeignClient(name = "nacos3002")
public interface INacos3002ClientService {
@RequestMapping("/inner/get/service_name")
String getServiceName();
}
3002服务测试代码(被调用)
@RestController
public class NacosController {
@RequestMapping("/inner/get/service_name")
String getServiceName(){
return "我是Nacos 3002 服务";
}
}
六,启动3001和3002服务
七,浏览器访问3001的接口返回3002的数据
八,Nacos实现集群服务的负载均衡
3001服务还是作为服务消费者,3002代码一样,只是会通过设置jvm参数的方式设置两个不同的端口启动,分别是3002和3003。
当然集群服务部署在不同的机器,每台机器由于配置的不同会导致服务处理请求的效率不同,所以nacos提供了对不同机器服务下权重的设置,如下图。
注意
:这里你设置了权重但是你可能发现,访问其他服务还是走的默认的轮训策略,(如果你这里引入了restTemaple的@LoadBalanced会走ribbon的负载均衡策略)也就是说你设置的权重并没有生效。那么还需要在3001服务加上如下配置;
@Component
public class MyNacosRule {
@Bean
public IRule ribbonRule(){
return new NacosRule();
}
}
九,集群的就近访问原则
这里服务注册上来如果没有指定集群那么就会是默认的default
集群。这里可用通过在bootstrap.properties
配置文件里面指定;如下;
spring.cloud.nacos.discovery.cluster-name = xxxx
我这里就通过jvm启动参数的方式来给3002和3003服务指定集群;
通过测试发现,请求的流量都会走到3002这端口的服务上面来,因为3001和3002服务的集群是一样的
========》》》》》下节将介绍Nacos的动态配置😁😁😁😁😁😁😁😁😁