1、功能介绍
nacos 通讯的机制全部由SpringMVC Controller支持
1.1、注册中心
1.1.1、服务注册
使用注解 @EnableDiscoveryClient。通过Nacos Client 提供的方法向 Nacos Server 发送注册请求
NacosDiscoveryAutoConfiguration 配置类 NacosAutoServiceRegistraion
Server提供的 api 接口 InstanceController类
心跳接口 /nacos/v1/ns/instance/beat#PUT
注册接口 /nacos/v1/ns/instance#POST 心跳检测 也可以完成注册功能
1.1.2、服务发现
服务发现
ServiceController 类 (/nacos/v1/ns/instance/list#GET) 获取服务实例的信息
serviceMannager .registerInstance
serviceMannager .gerService
基于Ribbon 进行服务发现的
updateListOfServers
serviceInfoMap.get(key)
1.2、配置中心
1.2.1、功能描述
1.2.2、配置信息的形式
配置中心的信息 在spring ioc 或者 springboot 中都是通过配置类 保存的信息 key-value。
配置文件在程序中是以配置类的形式存在的。
比如:
NacosConfigBootStrapConfiguration配置类
NacosConfigProperties 配置属性信息
NacosConfigSourceLocator属性资源定位器
1.2.3、不同项目配置文件
配置文件的隔离,不同的项目会读取自己感兴趣、相关的配置文件。
configServer.getConfig(dataID,group,timeout) / api ->/v1/cs/configs GET params
nacos 会将配置文件保存在本地,作为缓存。
nacos 配置文件持久化可以选择 MySQL
项目加载配置文件的流程:加载共享配置信息、加载扩展配置信息、加载应用配置信息
1.2.4、动态感知远程配置文件的变化
配置文件的核心功能
在 Config Client 中如何 感知 Config Server 中信息的变化?
在 Client 端开启线程池 进行长轮询任务,查找最近发生变化的配置文件的key,根据本地配置信息的MD5值和服务器的MD5值进行比较,如果不一样就是发生变化了。checkUpdateDataIds() 拿到key 进行获取最新的配置信息。注册事件监听,执行回调方法 onEvent # LocalDataChangeEvent 类。服务端的类 监听事件修改机制,进行长轮询之间的响应。
:::warning
啥是长轮询:client 端 和 server端进行 http 连接,设置超时时间,在超时时间范围内不会进行返回,在server端的线程一直处于活动状态,直到server端找到了client端的相关业务数据。
和长连接的区别:长连接 连接不会断开,会有心跳续约的机制。 :::
1.3、功能使用
2、核心源码分析
3、核心技术分析
未完….