Nacos 实现原理图
服务注册-main-demo
Nacos 源码如何读
服务注册:registerInstance
》》》发送一个 POST 请求,来注册一个实例
服务发现:getAllInstances
2021-01-26 21:30:45
Spring ~ 到 SpringCloud
Nacos 自动配置
1)、看 pom 依赖
2)、看依赖,看 spring.factories
3)、自动配置
Spring~Nacos 关系
Nacos SpringBoot调用流程
1)、查看关系图。快捷键 Ctrl + Alt + Shift + U
2)、它继承 ApplicationListener,就需要重写 onApplicationEvent 方法。
IOC容器启动的时候,会加载 AbstractApplicationContext.refresh 方法,此时会调用到 finishRefresh 方法
而此处的 publishEvent 会调用所有的 ApplicationListener.onApplicationContext 方法。
register 方法表示,SpringCloud Common包下的一个 ServiceRegistry 接口实现规范。
被 Nacos 所实现
SpringBoot main ~ Nacos register 流程
》》》下面给出 SpringBoot main 调用
Nacos 心跳
1)、默认创建临时节点,向注册中心注册服务之前,还添加了心跳信息(为了续约),也就是调用 addBeatInfo 方法。
2)、其内部就是调用了调度器,传入一个 BeatTask 对象,还有心跳频率。
Task 对象是什么?心跳频率是多少???
3)、由此可以看出,心跳频率默认,5s 一次。
4)、而 BeatTask 其就是一个 Runnable 接口的实现类。
》》》发送心跳也是打 API,其调用 sendBeat 方法。
注册持久化节点
2021-01-26 23:14:01
1)、创建节点的时候,设置为非临时节点即可。
2)、持久化文件会在 ${nacos.home}\data\naming\data\public\xxx
下
3)、节点的隔离
4)、Service
》》》创建的节点,在最后都会存在这两个 set 集合中。
》》》临时的,不用放数据库中,服务挂了,启动也会自动注册,在内存中的,比较快。(发送心跳来保持续约)
》》》在注册服务之前,调用了两个方法。1、createEmptyService 方法。2、getService 方法。
》》》我们一步步往下看。
》》》createEmptyService 如果有就结束方法,什么也不做。如果没有就构造一个 Service。(此处的初始化方法,在后面讲解)
》》》getService(如果上一步拿到的 Service 不为空,就什么也不做,走到 getService 方法)
》》》putServiceAndInit 初始化方法(这里包含了两个步骤 1、put Service。2、init 初始化。)
》》》先看 put,使用了双 Map 结构进行 put
》》》init 初始化(这里会干两件事:1、健康检查”重点看 clientBeatCheckTask 对象“。2、初始化集群)
》》》clientBeatCheckTask 实现了 Runnable 接口,重点看 run 方法,循环所有实例的临时节点,进行循环检查。
Nacos ProcessOn 流程图
2021-01-27 00:19:47 好晚了,明天还要体检,睡觉了,。。。改天再完善。。。
Nacos 再次分析
启动流程
2022-01-17 08:48:10
中规中矩,使用了 Spring,SpringBoot,SpringCloud 的三大组件的规范,以及特性(机制)开发完成。
注册流程
InstanceController#register
注册实例
(2022-01-20 15:32:28 我发现了,原来这个简单的注册,其实里面包含巨多的东西,下面只有其中一部分而已。)
InstanceController#beat
心跳检测
InstanceController#deregister
剔除实例