nacos源码下

服务发现: 

这个就是服务端获取实例的入口

 

 点进去后,这个方法很重要

 

点进去后,获取服务信息 

 

 点进去后,看这个方法

 

 

 点进去后,就是这样。第一次获取时这个map肯定为空

 

 第一次为空的话怎么办呢?调用这个方法:

 点进去后,主要看这个方法。这就是我们调用的方法

 

 

点进去查询我们的列表 

 

 拿到信息后,最终刚进了map里面去(这里标记的是取的方法)

 

这两个展示的就是第一次拉和定时拉 

 

 

看看定时拉的方法 

 

 

点进去

 

 这个定时任务里又会嵌套调用的执行更新实例的方法

 

 心跳检测的源码:

首先判断是否是临时实例:

 

 上面的某个方法点进来的,构建一些实例信息。其中有个实例的周期,默认是5s中

 

 点进去心跳检测的源码后

 这个beatTask是一个线程

 

这个任务是干嘛的呢 

 

上面的sendBeat方法点进去 

 

 

 客户端的心跳检测任务

 

 这个任务具体就是拿所有的实例,而且是拿临时实例还是永久实例都是在这个方法里做判断的。接着这幅图下面的代码解析:如果你的心跳超过15s,那么就认为超时了。则将服务的健康状态由true改为false

 

 还是上面的方法里下面的代码:如果时间超过30ms就将这个服务删掉了

 

 到底怎么删掉的呢?

 上面代码的特别备注:

 

 上面的方法中点进来的   调用的是delete

 

 具体走的就是这个方法

 

remove方法点进来 

 

 

上面代码的特别说明 

 

 put方法点进去后

 

 

 服务事件的变动源码:

注册中心变了后,客户端除了有每隔5s的定时检查,还有注册中心主动去推送给客户端服务列表的动作。实时的告诉客户端某某服务下线了,让客户端把他的缓存列表中的服务删掉

 真正更新注册表是在这里面做的(就是圈起来的代码)。这些代码是在updateIps()方法里找到的

 

 更新完之后呢

 

 

 点进去,其实发布了一个实例变化的事件。肯定在某个地方监听了这个事件并做了处理通知给客户端

 

 在哪儿做的呢?就是这个方法里

 

 还是在上面那个方法的底部,调用udpPush方法:

 

点进来,会给客户端发起一个udp的请求

 上面那个方法里的方法,发了一个socket请求

 

 这些其实就是UDP的代码

 

 集群源码(这里讲AP架构。AP和eureka很相似,CP和zookper很相似)

 源码集群运行

 需要修改的东西

 

 启动的时候需要加这些参数

 

 每个里面都放集群信息

 

 

 启动每一台机器:

 

心跳在集群架构下的设计原理 和集群节点状态同步源码:

 

 

这次主要看这里的代码: 

 

 点进去

 点进去,对传进来的serviceName进行hash。所以说每次只会在一台服务上做服务健康检查。

 

 每隔一段时间,这个集群注册服务器都会发送这个接口,告诉别人他还活着。即使有一台服务器挂掉了也没关系,上面那个做hash运算的方法也不会错,他会定时的去检测有几台服务器还活着

 

 

 集群服务状态变动的通知(某个状态下线了,其他服务是怎样感知到这个服务实例被修改的呢?):

 

 

 

 也是在这个方法里的下面的代码

 

 

 

 也是调另外一个接口

 

服务新增数据的同步源码剖析:

把数据传进来后,往其他节点进行同步的: 

点进去,应该知道一点,只有集群的时候这段代码才会执行。往其他节点进行同步的

 

 假设有两台服务器在运行了很久了,也有许多服务注册了。如果新开启一台服务器,那么新开的这台服务器会去其他服务器拉取服务列表:

开启一个加载数据的任务: 

点进去这个任务: 

 

从远端拉服务的代码: 

 

 

点进去 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值