首先分享之前的所有文章 , 欢迎点赞收藏转发三连下次一定 >>>> 😜😜😜
文章合集 : 🎁 juejin.cn/post/694164…
Github : 👉 github.com/black-ant
CASE 备份 : 👉 gitee.com/antblack/ca…
一 . 前言
Nacos 请求时部分操作异常会直接宕掉 ,这个时候了解整个 Nacos Client 端的流程就至关重要.
Nacos 主流程主要分为以下几个部分 :
- Nacos Client 端的启动和初始化
- Nacos Client 端服务注册
- Nacos Client 端服务发现
二 . Nacos Client 端的启动和初始化
Nacos 的自动装配类主要分为2个部分 :
- NacosConfigAutoConfiguration
- NacosDiscoveryAutoConfiguration
上一篇 Nacos 配置加载流程和优先级 已经看了配置的处理流程 , 这一篇主要关注 NacosDiscoveryAutoConfiguration
2.1 Nacos 的 Discovery 自动装配类
在 Nacos 的启动过程中 , 在配置类中初始化了如下几个对象 :
1 | java复制代码- new NacosServiceManager() |
2.1.1 NacosWatch 的处理
1 | java复制代码// C- NacosWatch |
2.1.2 初始化流程
Step1 : NacosWatch 发起监听
1 | java复制代码// NamingService init 流程 |
Step 2 : NamingFactory 构建 NamingService
1 | java复制代码// 实际上是通过反射生产最终的实例对象 |
Step 3 : EventDispatcher 添加监听器
1 | java复制代码public void subscribe(String serviceName, String groupName, List<String> clusters, EventListener listener) |
hostReactor.getServiceInfo 结果 :
三 . Nacos Client 端服务注册
服务注册涉及到如下流程 :
NacosRegistration
:保存服务的基本数据信息NacosServiceRegistry
:实现服务注册NacosServiceRegistryAutoConfiguration
:Nacos自动配置类
Nacos 服务注册的起点是 @EnableDiscoveryClient , 其最终会调用 NacosAutoServiceRegistration :
- AbstractAutoServiceRegistration
1 | java复制代码@Import(EnableDiscoveryClientImportSelector.class) |
3.1 start
不同的注册中心 , 会有不同的实现类 ,此处是对应 Nacos 的 NacosAutoServiceRegistration
1 | java复制代码// C- NacosAutoServiceRegistration |
3.2 NacosServiceRegistry 发起注册
1 | java复制代码public void register(Registration registration) { |
四. 服务的发现
之前在Nacos 基础 中 , 我们大概看过一点 , 这里无非是再看一下
Nacos 的不同版本获取的方式是有很大区别的 , 这里主要针对 spring-cloud-starter-alibaba-nacos-discovery : 2.2.5 版本来看一下 .
4.1 Nacos Server 的发现
Step 1 : 发起的起点
1 | java复制代码private List<NacosServer> getServers() { |
Step 2 : 发现的主流程
到这里就和之前的逻辑串起来了 , 后面就是反向调用 Nacos Server 中提供的接口即可
1 | java复制代码// C- NacosNamingService |
这里获取中会从 Map<String, ServiceInfo> serviceInfoMap 中获取数据 , 下面来看一下 ServiceInfo 是如何获取的
1 | java复制代码public void updateServiceNow(String serviceName, String clusters) { |
总结
这篇文章有点简单 , 了解的不深 , 但是应该是很有用 , 出现问题在核心的地方打个断点 ,能节省很多时间
TODO : 流程图今天就不画了 , 后面有时间补一个
本文转载自: 掘金