Nacos 源码解读(更新中...)

spring-cloud-alibaba 版本说明

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 流程图

1、nacos注册源码

2、nacos服务发现

3、nacos健康检查

4、nacos心跳机制

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

剔除实例