读源码方法:
1 Debug:生产环境无法 Debug,这个一般用于开发环境。
2 静态看源码:这个更重要,debug 只是配合一下。
3 第一遍看主线。第二遍看次要。第三遍看细节。
4 优先看参数,例如这里的 instance,看代码中的 instance,并区分哪些是关键 instance 的。这里最后一个 instance 是关键。
看看 consistencyService 定义的地方。
从 @Resource 的 name 看,应该是最上面的那个实现类。
当然也可以通过 debug 来验证,打个断点看看。
另外要注意一下:Instance 实现了 Record,这里体现了面向接口编程的思想。
到此,注册逻辑结束。但实际还没结束。
当看到 Runnable 时,就要看线程中的 run 方法。
run 方法会消费阻塞队列 tasks,并对其中的数据进行处理。
分支代码不看,抓重点 updateIPs。
找到核心代码。
该结构定义如下:
它就是实例的的注册表。
微服务很多,并发量高,如果不异步消费而采用同步,注册会很慢。如果一个微服务有十几个类似 nacos 客户端嵌入,微服务启动时间会很长。
延迟注册这个问题不大,并且出现这种问题的场景很少。
tasks 中有数据时,正常消费。tasks 中无数据时,会在 tasks.take 处阻塞,让出 CPU ,这是阻塞队列的特性决定的,可以去看看并发编程。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/121893824
内容来源于网络,如有侵权,请联系作者删除!