Nacos源码分析
0 读源码
0.1 读什么
-
读目的:该框架解决了什么问题?比同类框架相比优劣势是什么?
-
读注释:类、函数和目的、核心逻辑、核心参数说明
-
读思想:设计模式六大原则、高内聚低耦合、优化思想
-
读原理:核心原理和步骤
-
读方案:设计方案
0.2 读误区
- 选择难度大、复杂的源码
- 没有规划、毫无目的的源码
- 直接看源码解析,缺乏先自己思考再对照源码
0.3 读思想
- 先会使用demo
- 由易入难
- 先整体后局部:先看架构、先看项目结构、先看函数列表
- 从设计者的角度学源码:先猜想后验证
- 从设计模式角度学源码:设计模式的六大原则
- 粗粒度:读核心原理、关键特性实现、高抽象层
1 nacos client源码分析
1.1 nacos client如何注册并维持心跳?
入口:从读springboot源码套路入手,找到spring-cloud-alibaba-nacos-discovery源码包的spring.factories文件入手,找出nacos服务注册的自动装配类NacosDiscoveryAutoConfiguration
那么问题来了,是在哪里发起NacosServiceRegistry的register方法的呢?
查看NacosAutoServiceRegistration的父类AbstractAutoServiceRegistration得知:
AbstractAutoServiceRegistration当应用容器启动后调用其start方法,跟进去:
最终问题归结为NacosServiceRegistry的register方法:
委托给namingService的registerInstance方法:
2 nacos server源码解析
2.1 nacos sever 对 client 的处理原理与过程中重要的类和接口
-
InstanceController控制器
在nacos源码的naming模块下,com.alibaba.nacos.naming.controllers包下定义了很多处理服务实例心跳、注册等请求的控制器类。
-
Service类
在 nacos 客户端的一个微服务名称定义的微服务,在 Nacos 服务端是以 Service 实例的形式出现的,包含了一个集群的所有实例instance信息。
-
RecordListener接口
Service 类实现了 RecordListener 接口,数据监听接口。
-
Record接口
nacos集群中传输和存储的记录
-
Cluster类
一个Service的instance集群
-
Instance类
注册到nacos中的具体服务实例
-
ServiceManager类
nacos中所有Service的核心管理器
-
ConsistencyService接口
提供nacos集群节点间的数据同步服务
-
Synchronizer接口
同步器,当前nacos主动发起的同步操作
2.2 nacos server处理注册请求