一、Nacos服务注册整体流程图
二、Nacos服务启动自动注册源码剖析
2.1、SPI自动装备
- 通过SpringBoot的Spi机制注入Nacos所需要的Bean;
- NacosServiceRegistryAutoConfiguration 注入下面三个Bean
NacosServiceRegistry、NacosRegistration、NacosAutoServiceRegistration;
2.2 监听事件启动
(1)、监听 WebServerInitializedEvent 事件;
(2)、调用NacosServiceRegistry的 register 方法
NacosAutoServiceRegistration 的类图关系
AbstractAutoServiceRegistration 通过监听WebServerInitializedEvent 事件,进行服务注册,调用bind->start->register
Nacos实现了标准的Spring Cloud ServiceRegistry 接口,从这里可以学习到设计接口规范,无论什么样的注册中心,都可轻松实现标准化接口,扩展性很高。
2.3、注册逻辑
(1)、NacosServiceRegistry 调用register;
(2)、Instance 实例对象的填充
(3)、NamingService作客户端的注册、取消、获取服务列表实列、订阅等功能接口;
补充 NamingService 的初始化逻辑,通过反射进行实例化
NamingService 的初始化逻辑完毕
NamingService 调用NamingClientProxy进行注册
NamingClientProxy 有三个实现 NamingClientProxyDelegate、NamingGrpcClientProxy、NamingHttpClientProxy,1.0是以Http协议来进行源码注册逻辑分析,2.0是以Grpc协议来处理注册与心跳的;
(1)、NamingClientProxyDelegate 选择NamingGrpcClientProxy 还是 NamingHttpClientProxy
(2)、如果是临时节点,那么就采用NamingGrpcClientProxy发送注册
NamingHttpClientProxy 创建维护心跳检查、长链接信息等
RpcClient 维护了心跳检查,每隔5S
1.0版本采用的是Http;
Http方式构造注册的请求参数,随机选择NacosServer构造Http请求,请求地址 http://ip:port/nacos//v1/ns/instance
思考:为什么要用长链接GPRC替换掉Http的长轮训方案,两个方案的优缺点都有哪些
以上是客户端发起注册逻辑的处理源码分析,简单总一个总结
1、监听WebServerInitializedEvent 事件
2、组装参数,随机选择NacosServer 服务实例
3、通过GRPC方式维护长链接发送注册请求