【Nacos源码系列】客户端(AP模式)
Nacos作为注册中心越来越流行,而且性能强大,所以有必要看看源码,了解下它的运行机制了,下面是对Nacos客户端的分析
一、简介
1、官网文档(https://nacos.io/zh-cn/docs/what-is-nacos.html)
2、使用和版本
2.1、引入依赖
父Pom中支持springboot、spring cloud、spring cloud alibaba
2.2、当前项目pom中引入nacos依赖
2.3、application.properties中配置
二、核心功能
1、注册流程
将ip和port等信息注册到服务端,将服务暴露出来供其它服务使用
2、心跳机制
AP模式下,发起http请求给服务端,维护服务的状态,默认5秒执行一次(CP模式是服务端主动检查);
3、服务发现
3.1 通过http获取需要的服务实例的列表,并且定时拉取最新数据,默认1秒执行一次;
3.2 通过udp协议,服务端推送变动消息来更新服务实例列表;
三、整体的源码交互流程图
四、注册流程源码分析
1、注册入口
通过spring-cloud-starter-alibaba-nacos-discovery-2.2.1.RELEASE.jar下面的SPI扩展机制spring.factories中的
NacosServiceRegistryAutoConfiguration自动注册
2、NacosAutoServiceRegistration结构
3、通过监听SpringBoot的WebServerInitializedEvent事件来进行注册动作,核心流程如下3.1 调用AbstractAutoServiceRegistration#onApplicationEvent
start方法
3.2 com.alibaba.cloud.nacos.registry.NacosServiceRegistry#register
3.3 com.alibaba.nacos.client.naming.NacosNamingService#registerInstance
3.4 执行注册动作com.alibaba.nacos.client.naming.net.NamingProxy#registerService
五、心跳机制源码分析
1、在注册之间将心跳定时任务构建com.alibaba.nacos.client.naming.NacosNamingService#registerInstance
2、com.alibaba.nacos.client.naming.beat.BeatReactor#addBeatInfo
3、com.alibaba.nacos.client.naming.beat.BeatReactor.BeatTask#run
4、com.alibaba.nacos.client.naming.net.NamingProxy#sendBeat
六、服务发现源码分析
一般都是服务第一次被调用的时候才会去获取
1、com.alibaba.nacos.client.naming.NacosNamingService#getAllInstances
2、com.alibaba.nacos.client.naming.core.HostReactor#getServiceInfo
3、com.alibaba.nacos.client.naming.core.HostReactor#updateServiceNow
4、com.alibaba.nacos.client.naming.net.NamingProxy#queryList
特别注意这个udpPort,用于udp通信,后续nacos服务端会通过udp协议push消息,接收服务实例变化的通知
5、第3步中,需要开启定死任务去拉取更新列表
com.alibaba.nacos.client.naming.core.HostReactor#scheduleUpdateIfAbsent
添加任务
6、更新任务执行com.alibaba.nacos.client.naming.core.HostReactor.UpdateTask#run
7、服务端push消息,来更新服务实例列表
创建com.alibaba.nacos.client.naming.core.PushReceiver不断的接收upd数据
解析数据、更新实例数据、发送ack消息
com.alibaba.nacos.client.naming.core.PushReceiver#run
七、总结
1、nacos客户端通过springboot的自动配置机制实现注册,并且通过springboot发送的事件消息来触发注册动作;
2、AP模式下为了维护注册服务的状态,通过心跳机制不断给服务端发送心跳,来保持活跃状态(CP模式是nacos服务器主动发请求检查tcp、http);
3、获取的服务通过两个方式来维护最新的数据,一个是通过主动定时的拉取,另一个是通过udp协议被动的接收服务端push的消息;
第零个星期:【Nacos源码系列】AP集群-注册流程