首页 > 编程语言 >nacos1.4.X版本服务注册源码分析

nacos1.4.X版本服务注册源码分析

时间:2023-09-20 20:01:07浏览次数:42  
标签:nacos1.4 注册 实例 nacos alibaba 源码 版本 naming com

 

客户端:

nacos1.4.1版本服务注册流程

1:依赖spring-cloud-starter-alibaba-nacos-discovery

2:resources/META-INF/spring.factories 自动配置 NacosServiceRegistryAutoConfiguration

3: 自动配置类NacosAutoServiceRegistration 继承 AbstractAutoServiceRegistration 实现ApplicationListener<WebServerInitializedEvent>

4:服务启动完成后,发布事件调用onApplicationEvent方法

5:org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration#start

com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration#register

com.alibaba.cloud.nacos.registry.NacosServiceRegistry#register

6:namingService.registerInstance引入nacos关键实例NacosNamingService调用注册实例

7:如果是临时节点,启动心跳线程延迟5s运行,调用地址:/instance/beat,执行成功再次发起一个延迟任务,延迟时间取自服务端响应 clientBeatInterval
如果请求资源不存在,则发送一个注册请求

8:向所有节点发送http请求调用nacos服务注册接口

 


服务端:

1:com.alibaba.nacos.naming.controllers.InstanceController#beat /instance/beat 服务端处理心跳请求

1.1 从缓存中获取实例instance
如果不存在,且不包含beat开启标记,则返回RESOURCE_NOT_FOUND,说明没有注册成功(客户端初次注册时发生)
如果不存在,且包含beat开启标记(说明实例被刚刚踢掉),则服务端直接注册实例
如果实例存在,则返回成功标记(包含lightBeatEnabled心跳正常、clientBeatInterval客户端心跳间隔,默认5s)

2:com.alibaba.nacos.naming.controllers.InstanceController#register /instance/register 服务端处理实例注册请求

命名空间-> (分组::服务名称-> 服务)
Map(namespace, Map(group::serviceName, Service)) 服务端实例注册数据结构

com.alibaba.nacos.naming.core.Service#clusterMap com.alibaba.nacos.naming.core.Cluster#ephemeralInstances

1.1 解析请求并组装实例

1.2 注册实例 com.alibaba.nacos.naming.core.ServiceManager#registerInstance

1.2.1 判断注册实例数据结构是否存在,com.alibaba.nacos.naming.core.ServiceManager#createEmptyService

1.2.2 如果数据结构不存在,则创建数据结构 & 缓存服务service并初始化服务 com.alibaba.nacos.naming.core.ServiceManager#putServiceAndInit

putService(service) 服务放置到缓存中

service.init() 初始化服务 列出服务对应的所有实例,最后心跳更新时间距离现在大于15s,则设置为不健康。大于30s,则直接从缓存中删除 ClientBeatCheckTask

实例注册过程:

com.alibaba.nacos.naming.consistency.ephemeral.distro.DistroConsistencyServiceImpl#put

com.alibaba.nacos.naming.consistency.ephemeral.distro.DistroConsistencyServiceImpl#onPut
组装为Datum,并放到dataStore map中,然后将key放置到阻塞队列ArrayBlockingQueue,tasks.offer, 启动线程阻塞take数据

com.alibaba.nacos.naming.core.Service#onChange 处理变更请求

clusterMap.get(entry.getKey()).updateIps(entryIPs, ephemeral) 更新后重新赋值

1.3:其他
3.1 udp推送数据 getPushService().serviceChanged(this)
com.alibaba.nacos.naming.push.PushService#serviceChanged 发布事件

com.alibaba.nacos.naming.push.PushService#onApplicationEvent 处理事件&推送数据给客户端

3.2 异步注册实例
com.alibaba.nacos.naming.consistency.ephemeral.distro.DistroConsistencyServiceImpl.Notifier#addTask 添加服务
com.alibaba.nacos.naming.consistency.ephemeral.distro.DistroConsistencyServiceImpl.Notifier#run 启动异步线程死循环取数据进行处理

3.3 服务端健康检查
com.alibaba.nacos.naming.core.Service#init 初始化服务时

HealthCheckReactor.scheduleCheck(clientBeatCheckTask)


3:com.alibaba.nacos.naming.controllers.InstanceController#deregister 注销实例

3.1 先从缓存中获取所有实例,然后删除当前需要注册的实例 substractIpAddresses(service, ephemeral, ips)

3.2 consistencyService.put(key, instances) 注销实例,流程和注册过程一致












 

 


标签:nacos1.4,注册,实例,nacos,alibaba,源码,版本,naming,com
From: https://www.cnblogs.com/warrior4236/p/17718246.html

相关文章

  • Learn Git in 30 days——第 21 天:修正 commit 过的版本历史记录 Part 3
    写的非常好的一个Git系列文章,强烈推荐原文链接:https://github.com/doggy8088/Learn-Git-in-30-days/tree/master/zh-cn在版本控制过程中,还有个常见的状況,那就是当你在一个分支中开发了一段时间,但后来决定整个分支都不要了,不过当中却有几个版本还想留下,这时要删除分支也不是,把......
  • 《Web性能权威指南》高清高质量PDF电子书+源码
    前言阅读第一部分网络技术概览阅读第1章延迟与带宽阅读第2章TCP的构成第3章UDP的构成第4章传输层安全(TLS)第二部分无线网络性能第5章无线网络概览第6章Wi-Fi第7章移动网络第8章移动网络的优化建议第三部分HTTP第9章HTTP简史第10章Web性能要点第11章HTTP......
  • [SpringSecurity5.6.2源码分析十二]:CsrfFilter
    前言• Csrf(跨站伪造请求):指的是用户在A网站认证完成后,A网站Cookie保存在了浏览器中,然后用户在B网站点击了钓鱼链接,使其让钓鱼请求带有了A网站的Cookie,从而让A网站认为这是一次正常的请求• 而SpringSecurity采用的是同步令牌模式(SynchronizerTokenPattern)来预防Csrf攻击•......
  • 《算法的乐趣》高清高质量PDF 电子书 附源码
    本书从一系列有趣的生活实例出发,全面介绍了构造算法的基础方法及其广泛应用,生动地展现了算法的趣味性和实用性。全书分为两个部分,第一部分介绍了算法的概念、常用的算法结构以及实现方法,第二部分介绍了算法在各个领域的应用,如物理实验、计算机图形学、数字音频处理等。其中,既有各种......
  • 《Python深度学习》高清高质量PDF电子书+源码
    Keras之父,TensorFlow机器学习框架贡献者详尽介绍了用Python和Keras进行深度学习的探索实践,包括计算机视觉、自然语言处理、产生式模型等应用。书中包含30多个代码示例,步骤讲解详细透彻。由于本书立足于人工智能的可达性和大众化,读者无须具备机器学习相关背景知识即可展开阅读。在学......
  • javaweb运行tomcat时Jsp文件显示源码
    今天在写javaweb项目的时候出现了运行一直不打开浏览器,如果手动打开浏览器的话,就会出现自己写的jsp文件中的所有源码,具体如图所示我的问题在Servlet中因为要告诉jsp文件servlet在哪里所以要在类名的上一行写上@WebServlet("/Servlet"),但是由于我的粗心写成了@WebServlet("Servl......
  • C++医学影像(PACS)管理系统源码
    PACS(PictureArchivingandCommunicationsSystem)——图像存储与传输系统,和医院信息化及数字化的目标紧密关联,它是专门为现代化医院的影像管理而设计的包括数字化医学图像信息的采集、显示、处理、存储、诊断、输出、管理、查询、信息处理的综合应用系统,是以数字化诊断(无纸化、无......
  • Chrome 指定版本
    查找版本https://raw.githubusercontent.com/Bugazelle/chromium-all-old-stable-versions/master/chromium.stable.json找到之后可以根据链接直接下载(有梯子)......
  • LabVIEW2023中文版labview中文版最新下载 各个版本下载
    NILabVIEW2020是一款专业的系统工程软件,用户界面友好,为用户提供了图形化编程方法,更好地进行可视化应用,如硬件配置、测量数据和调试等等方面。新版本简化了分布式测试、测量和控制系统的设计,引入了接口,且接口启用多种继承形式,大大提高用户的工作效率。软件地址:看置顶贴NILabVIEW......
  • Lumion12各版本软件安装包下载及安装教程 各个版本下载
    值得一提的是这些资源可以极大地帮助设计师创建出漂亮的场景,让客户更加直观地感受建筑和景观的效果。根据行业数据显示Lumion是一款功能强大的三维渲染软件,其中灯光系统是一个非常重要的部分。值得注意的是人们能够直接在自己的电脑上创建虚拟现实。通过渲染高清电影比以前更快,Lumi......