栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

怎样读 nacos 源码——服务端处理客户端注册解读

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

怎样读 nacos 源码——服务端处理客户端注册解读

一 nacos 代码结构

二 Controller 入口

三 注册入口

四 继续跟进

读源码方法:

1 Debug:生产环境无法 Debug,这个一般用于开发环境。

2 静态看源码:这个更重要,debug 只是配合一下。

3 第一遍看主线。第二遍看次要。第三遍看细节。

4 优先看参数,例如这里的 instance,看代码中的 instance,并区分哪些是关键 instance 的。这里最后一个 instance 是关键。

五 跟踪到 addInstance 方法中

六 继续跟踪到 put

看看 consistencyService 定义的地方。

从 @Resource 的 name 看,应该是最上面的那个实现类。

当然也可以通过 debug 来验证,打个断点看看。

另外要注意一下:Instance 实现了 Record,这里体现了面向接口编程的思想。

七 继续往下跟

八 进入 put 方法

九 进入到 onPut 方法

十 进入 addTask 方法

到此,注册逻辑结束。但实际还没结束。

十一 线程中 run 函数调用

当看到 Runnable 时,就要看线程中的 run 方法。

run 方法会消费阻塞队列 tasks,并对其中的数据进行处理。

十二 再看 handle 方法,关键代码如下

十三 进入 onChange 方法

分支代码不看,抓重点 updateIPs。

十四 进入 updateIPs

十五 继续进入 updateIPs

找到核心代码。

该结构定义如下:

它就是实例的的注册表。

十六 提问 1 为什么丢到阻塞队列中,然后异步消费?

微服务很多,并发量高,如果不异步消费而采用同步,注册会很慢。如果一个微服务有十几个类似 nacos 客户端嵌入,微服务启动时间会很长。

2 如果线程消费阻塞队列过慢会出现消息积压问题吗?

延迟注册这个问题不大,并且出现这种问题的场景很少。

3 下面代码会导致 CPU 在升高吗?

tasks 中有数据时,正常消费。tasks 中无数据时,会在 tasks.take 处阻塞,让出 CPU ,这是阻塞队列的特性决定的,可以去看看并发编程。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/658303.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号