• 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运算的方法也不会错,他会定时的去检测有几台服务器还活着

     

     

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

     

     

     

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

     

     

     

     也是调另外一个接口

     

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

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

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

     

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

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

    点进去这个任务: 

     

    从远端拉服务的代码: 

     

     

    点进去 

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    DC电源模块关于宽电压输入和输出的范围
    Linux 系统服务日志查询 journalctl:查询 systemd 日记
    tf.layers
    Node.js 零基础入门 Node.js 零基础入门第四天 4.4 在项目中操作MySQL
    JUC-管程
    Ollama部署大模型并安装WebUi
    Win10安装TensorRT
    星环科技重磅推出数据要素流通平台Transwarp Navier,助力企业实现隐私保护下的数据安全流通与协作
    手写java冒泡、插入、选择、快速、归并排序算法
    一篇文章讲清楚MySQL的聚簇/联合/覆盖索引、回表、索引下推
  • 原文地址:https://blog.csdn.net/xajh_czbk/article/details/127717573