服务发现:
这个就是服务端获取实例的入口
点进去后,这个方法很重要
点进去后,获取服务信息
点进去后,看这个方法
点进去后,就是这样。第一次获取时这个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运算的方法也不会错,他会定时的去检测有几台服务器还活着
集群服务状态变动的通知(某个状态下线了,其他服务是怎样感知到这个服务实例被修改的呢?):
也是在这个方法里的下面的代码
也是调另外一个接口
服务新增数据的同步源码剖析:
把数据传进来后,往其他节点进行同步的:
点进去,应该知道一点,只有集群的时候这段代码才会执行。往其他节点进行同步的
假设有两台服务器在运行了很久了,也有许多服务注册了。如果新开启一台服务器,那么新开的这台服务器会去其他服务器拉取服务列表:
开启一个加载数据的任务:
点进去这个任务:
从远端拉服务的代码:
点进去