Nacos服务健康检查与服务变动事件发布源码解析

简介: Nacos服务健康检查与服务变动事件发布源码解析

1 快速入门使用


SpringCloud Nacos配置中心:https://blog.csdn.net/ZGL_cyy/article/details/113621565

SpringCloud Nacos实战应用: https://blog.csdn.net/ZGL_cyy/article/details/130873488

2 源码解析

2.1 环境准备

下载源码或者安装包

你可以通过源码和发行包两种方式来获取 Nacos。

从 Github 上下载源码方式

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin

nacos提供了一些api, 其中有一个api就是用来发现服务的

https://nacos.io/zh-cn/docs/open-api.html

2.2 查看实例列表源码分析

nacos通过springboot的自动装配, 在项目启动时候通过nacos提供的api去nacos服务端拉取服务

查看源码 :

进入NacosDiscoveryAutoConfiguration类查看, 看一下自动装配的源码

进入this.namingService().selectInstances方法

为什么springboot刚启动, 第一次调用注册的服务速度会慢? 就是因为nacos的服务是懒加载的, 我们只有请求了一次服务, nacos才会去服务端将所有注册的服务获取到(上面if中的逻辑), 当我们第二次调用时, 已经获取到服务了, 只需要调用就可以了, 所有第一次请求的速度比较慢


2.3 nacos与zk的不同 :

总所周知, zk底层采用netty长连接的方式发送心跳, 来判断服务端的服务是否挂掉, 而nacos则是采用短连接 + 周期性线程池(请求服务列表api)的方式来判断服务是否挂掉

2.4 nacos服务发现

服务第一次发现 :

周期性服务发现 :

进入this.scheduleUpdateIfAbsent方法

进入this.updateService(this.serviceName, this.clusters);

服务发现就此结束

2.5 nacos的心跳机制和服务健康检查的逻辑

接下来一起看一下nacos的心跳机制和服务健康检查的逻辑

从nacos的服务注册开始查看(注册的源码分析上一篇有所讲解), nacos的客户端服务注册过程中有这样一行代码

分别进入两个方法

此次是一个延时线程池, 过了5秒之后,去执行run方法, 接下来进入run方法

进入serverProxy.sendBeat方法

发送实例心跳, nacos在服务注册的时候, 就会通过线程池延时五秒发送心跳, 此处只发送了一次心跳, 按照我们的理解, 应该是持续发送心跳的, 那么接下来继续看run方法中的另一个方法

通过反复的执行run方法, 来达到每隔5s中发送一次心跳的功能

到此nacos的客服端服务注册完成, 接下来查看一下nacos服务端是如何持续的进行心跳检测的 :

由于方法层次太多就不贴图了, 方法调用路径

InstanceController.register -> 
getInstanceOperator().registerInstance(namespaceId, serviceName, instance); -> InstanceOperatorServiceImpl.registerInstance -> serviceManager.registerInstance(namespaceId, serviceName, coreInstance); -> createEmptyService(namespaceId, serviceName, instance.isEphemeral()); -> createServiceIfAbsent(namespaceId, serviceName, local, null); -> putServiceAndInit(service); ->
service.init(); ->

最终进入init()方法

此处又可以看见一个线程池, 进入scheduleCheck方法

接下来进入run方法查看 (他的子类ClientBeatCheckTask类中)

到此为止, 发送心跳和服务的健康状态检查源代码查看完毕

现在大家可能有这样一个疑问, 如果一个服务新注册到nacos服务端, 那么服务发现者们只有在5s之后拉取服务的时候才会发现有新的服务, 那么就会有一个5s的延时发现服务, 其实这样是可以接受的, 但是nacos对此也进行了优化, 如果一个新的服务注册到nacos服务端, 注册完成之后,nacos会利用事件发布, 给所有的服务发现者发送事件, 让服务发现者可以更快的发现服务


目录
相关文章
|
传感器 C# Android开发
深度解析Uno Platform中的事件处理机制与交互设计艺术:从理论到实践的全方位指南,助您构建响应迅速、交互流畅的跨平台应用
Uno Platform 是一款开源框架,支持使用 C# 和 XAML 开发跨平台原生 UI 应用,兼容 Windows、iOS、Android 及 WebAssembly。本文将介绍 Uno Platform 中高效的事件处理方法,并通过示例代码展示交互设计的核心原则与实践技巧,帮助提升应用的用户体验。事件处理让应用能响应用户输入,如点击、触摸及传感器数据变化。通过 XAML 或 C# 添加事件处理器,可确保及时反馈用户操作。示例代码展示了一个按钮点击事件处理过程。此外,还可运用动画和过渡效果进一步增强应用交互性。
517 57
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
713 2
|
数据管理 Nacos 开发者
"Nacos架构深度解析:一篇文章带你掌握业务层四大核心功能,服务注册、配置管理、元数据与健康检查一网打尽!"
【10月更文挑战第23天】Nacos 是一个用于服务注册发现和配置管理的平台,支持动态服务发现、配置管理、元数据管理和健康检查。其业务层包括服务注册与发现、配置管理、元数据管理和健康检查四大核心功能。通过示例代码展示了如何在业务层中使用Nacos,帮助开发者构建高可用、动态扩展的微服务生态系统。
627 0
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
1139 0
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
1325 0
|
图形学 开发者 UED
Unity游戏开发必备技巧:深度解析事件系统运用之道,从生命周期回调到自定义事件,打造高效逻辑与流畅交互的全方位指南
【8月更文挑战第31天】在游戏开发中,事件系统是连接游戏逻辑与用户交互的关键。Unity提供了多种机制处理事件,如MonoBehaviour生命周期回调、事件系统组件及自定义事件。本文介绍如何有效利用这些机制,包括创建自定义事件和使用Unity内置事件系统提升游戏体验。通过合理安排代码执行时机,如在Awake、Start等方法中初始化组件,以及使用委托和事件处理复杂逻辑,可以使游戏更加高效且逻辑清晰。掌握这些技巧有助于开发者更好地应对游戏开发挑战。
1167 0
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
804 0
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
1900 0
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
1840 0

热门文章

最新文章

推荐镜像

更多
  • DNS