Nacos主要有两个功能,第一个是作为注册中心,第二个是作为配置中心。
1、注册中心
对于注册中心而言,又可以分为两个部分:
最后需要留意一下客户端到服务器端的心跳续约过程:对于临时实例,客户端每隔5s会给服务端发送一个http请求,上报健康状态,也就是续约,一旦这个请求间隔超过15s,nacos服务端会认为这个实例不健康,超过30s会移除这个服务。
2、配置中心
(1)首先是怎么读取配置,需要了解程序的启动过程,也就是程序各配置文件之间的加载先后顺序:bootstrap.yml文件最先加载,程序拿到Nacos的服务器地址,读取到Nacos配置中心的配置文件,然后与本地的application.yml文件整合。
(2)配置热更新,对于springcloud而言就三步:
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
@Value("${spring.dataId.versionId}")
private String versionId;
成员变量所在的类上,加上@RefreshScope注解
此时当程序启动后,去更新Nacos文件的配置文件的相关Id的值,然后发布,不用重启服务就可以在程序中获取到最新的值了。
(3)Nacos配置持久化到MySQL数据库
这个我使用的是docker安装的Nacos,简单来说也是三部曲:
拉取Nacos镜像到本地,然后启动服务 docker run,在宿主机中建立自己的本地目录存放Nacos的配置文件,使用cp命令将Nacos的配置文件复制到你创建的目录。
使用docker rm -f 命令删除启动的Nacos服务,重新执行服务,启动时需要将前面创建的本地目录和Nccos的配置文件目录做挂载。
最后是修改本地目录中conf下的application.properties文件,最后docker restart 重启服务
具体的教程百度一万一个告诉你怎么做。
(4)客户端感知服务端配置变化
1.x版本使用长轮询,客户端主动发起一个请求到服务端,如果服务端没有配置变化,则会挂起该请求,直到服务端有变化或请求超时才会将请求返回,并且再次发起请求。
2.x版本使用gRPC协议,服务端主动维护长连接,保持服务器端和客户端之间的心跳机制,以确保连接的时效性,避免客户端和服务端频繁建立和关闭连接所带来的性能开销。