Nacos 简介
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速
实现动态服务发现、服务配置、服务元数据及流量管理。
从上面的介绍就可以看出,Nacos的作用就是一个注册中心,用来管理注册上来的各个微服务。
核心功能点:
- 服务注册: Nacos Client会通过发送REST请求想Nacos Server注册自己的服务,提供自身的元数据,比如IP地址,端口等信息。Nacos Server接收到注册请求后,就会把这些元数据存储到一个双层的内存Map中。
- 服务心跳: 在服务注册后,Nacos Client会维护一个定时心跳来维持统治Nacos Server,说明服务一致处于可用状态,防止被剔除,默认5s发送一次心跳
- 服务同步: Nacos Server集群之间会相互同步服务实例,用来保证服务信息的一致性。
- 服务发现: 服务消费者(Nacos Client)在调用服务提供的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务拉取服务最新的注册表信息更新到本地缓存。
- 服务健康检查: Nacos Server 会开启一个定时任务来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将他的healthy属性设置为false(客户端服务发现时不会发现),如果某个实例超过30s没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)
搭建Nacos环境
1 .安装Nacos
链接:https://pan.baidu.com/s/1clS8SszEjf89Hf8Hodgezg
提取码:0i3k
2 .启动Nacos
#切换目录
cd nacos/bin
#命令启动
startup.cmd -m standalone
linux'启动 nohup sh startup.sh -m standalone &
3 .访问Nacos
打开浏览器输入http://localhost:8848/nacos,即可访问服务, 默认密码是nacos/nacos
将服务注册到nacos注册中心上
1.在pom.xml中添加Nacos的依赖
<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.在主类上添加**@EnableDiscoveryClient**注解
@SpringBootApplication
@EnableDiscoveryClient
public class ProductServer {
public static void main(String[] args) {
SpringApplication.run(ProductServer.class,args);
}
}
3.在application.yml中添加Nacos服务的地址
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
- 启动服务, 观察Nacos的控制面板中是否有注册上来的商品微服务
注册中心作用
1.我们的在启动的时候就会把它的信息高速注册中心,并且会拉取- -份
最新的服务列表信息
2.每隔一段时间会给注册中心去发送一个心跳包,告诉 注册中心还活着,并且会拉取一份最新的服务列表信息.
3.如果连续几次没有个注册中心发送心跳包,注册中心就会把节点信息给踢出掉
没有配置中心之前我们存在的问题
1.我们现在按照微服务架构拆分成很多的服务,很多的符都要用到这个redis,那么每一个服务都需要去配置-片redis的信息,假设redis配置发生了变化.
2.数据库账号和密码放到本地中不安全
3.没有历史记录,修改配置没有历史记录
4.切换环境比较麻烦,比如测试环境和开发环境很多配置都是不一样,我们切换时候还要改很多配置.
5.改了配置没有办法动态刷新
Nacos Config入门
使用nacos作为配置中心,其实就是将nacos当做一个服务端,将各个微服务看成是客户端,我们将各个微服务的配置文件统一存放在nacos上,然后各个微服务从nacos上拉取配置即可。
- 搭建nacos环境【使用现有的nacos环境即可】
- 在商品微服务中引入nacos的依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 在微服务中添加nacos config的配置
注意:不能使用原来的application.yml
作为配置文件,而是新建一个bootstrap.yml
作为配置文件
配置文件优先级(由高到低):
bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml
spring:
application:
name: product-service
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #nacos中心地址
file-extension: yaml # 配置文件格式
profiles:
active: dev # 环境标识
- 在nacos中添加配置,然后把商品微服务application.yml配置复制到配置内容中.
配置动态刷新
在入门案例中,我们实现了配置的远程存放,但是此时如果修改了配置,我们的程序是无法读取到的,因此,我们需要开启配置的动态刷新功能.
- 在nacos中的product-service-dev.yaml配置项中添加下面配置:
appConfig:
name: product2020
2.在商品微服务中新增NacosConfigControlller.java
@RestController
@RefreshScope
public class NacosConfigController {
@Value("${appConfig.name}")
private String appConfigName;
@RequestMapping("/nacosConfig1")
public String nacosConfig(){
return "远程信息:"+appConfigName;
}
}