当前位置: 首页 > ops >正文

SpringCloud——Nacos

1、核心功能:

  • 服务注册与发现:

服务实例可动态注入到Nacos中,消费者通过服务名发现可用实例

// 启用EnableDiscoveryClient注解启用Nacos
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {public static void main(String[] args) {SpringApplication.run(UserServiceApplication.class, args);}
}
  • 动态配置管理:

支持配置的集中存储、版本控制及即时更新,无需重启服务。

  • 服务健康监测:

通过心跳机制主动探测(如HTTP/TCP)监控实例健康状态,自动剔除异常实例。

  • 服务治理:

支持动态路由权重分配灰度发布等流量管理功能。

2、如何实现服务健康检查?

旧版本:

  • 基于HTTP短连接
  • 客户端默认每5秒发送带有对应模块信息的心跳包服务端每5秒检查一次心跳
  • 超过15秒标记为不健康实例,超过30秒从注册表中剔除该实例
  • 有心跳但未注册的实例会自动注册
  • 支持自定义主动探测策略,返回码为200视为健康

新版本:

  • 基于gRPC长连接
  • gRPC长连接内置心跳机制,连接断开即剔除实例
  • 服务端每3秒检查一次连接活跃度
  • 若连接20s无数据交互,服务端主动探测客户端,失败则剔除

 

3、Nacos服务的注册流程:

手动注册:

  • 客户端初始化:应用启动时通过NamingFactory初始化NamingService实例
  • 注册实例定义Intance,并初始化服务名、IP、端口、元数据等信息,调用NamingService实例的registerIntance()方法进行注册
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;public class ManualRegistration {public static void main(String[] args) throws NacosException {// 1. 初始化客户端NamingService naming = NacosFactory.createNamingService("localhost:8848");// 2. 注册实例Instance instance = new Instance();instance.setIp("192.168.1.100");instance.setPort(8080);instance.setServiceName("order-service");naming.registerInstance("order-service", instance);System.out.println("手动注册成功!");// 3. 下线示例(可选)// naming.deregisterInstance("order-service", "192.168.1.100", 8080);}
}

自动注册:

  1. 依赖引入​:Spring Boot 项目通过 spring-cloud-starter-alibaba-nacos-discovery 自动注册服务。
  2. 配置服务信息​:在 application.yml 中指定 Nacos 地址和服务名
  3. 监听事件注册​:Spring 容器启动时,NacosAutoServiceRegistration 监听 WebServerInitializedEvent 事件,自动调用 NacosServiceRegistry 完成注册
​
// 将微服务模块注册到Nacos中,名称一般为启动类名称
// Nacos会自动获取当前服务的IP地址,并通过server.port获取端口,默认8080
// 对于非web应用,可自己在discovery下方定义IP和端口
spring:application:name: user-service  # 这个名称会作为服务标识注册到 Nacoscloud:nacos:discovery:server-addr: localhost:8848 # 对应nacos组件的服务地址ephemeral: true # 默认为true,即临时实例# IP:# port:​

注册的实例种类:

特性临时实例非临时实例
生命周期依赖客户端心跳,超时自动删除(默认心跳间隔5秒,15秒标记不健康,30秒剔除)不依赖心跳,需手动注销,即使进程终止仍保留在注册表中
存储方式仅内存缓存,不持久化

持久化到磁盘,重启Nacos后仍存在

健康检查客户端主动上报心跳(Client模式)

服务端主动探测(TCP/HTTP/MySQL协议,Server模式)

默认配置ephemeral=trueSpring Cloud默认临时实例

需显式配置ephemeral=false

适用场景动态扩缩容(如Kubernetes Pod)

基础设施服务(如MySQL、Redis)或需长期监控的实例

http://www.xdnf.cn/news/12046.html

相关文章:

  • SpringBoot自动化部署全攻略:CI/CD高效实践与避坑指南
  • 桂花网蓝牙网关物联网医院动态血糖管理应用案例
  • 金融系统功能测试:科技赋能,安全护航
  • 【赵渝强老师】Docker的图形化管理工具
  • 26考研 | 王道 | 计算机组成原理 | 四、指令系统
  • Sentinel微服务保护
  • 基于cornerstone3D的dicom影像浏览器 第二十八章 LabelTool文字标记,L标记,R标记及标记样式设置
  • 企业培训学习考试系统源码 ThinkPHP框架+Uniapp支持多终端适配部署
  • python训练营打卡第45天
  • python学习day39
  • Linux环境-通过命令查看zookeeper注册的服务
  • 网页前端开发(基础进阶4--axios)
  • 用 NGINX 构建高效 SMTP 代理`ngx_mail_smtp_module`
  • 软件上线前为什么要做性能测试?
  • 深度解析ArrayList
  • 05.字母异位词分组
  • AI赋能国风艺术:穿越时空的诗词画卷如何诞生?
  • Numpy——通用函数、向量化、基础的统计计算
  • Comparable和Comparator
  • React-native实战系列
  • 每日算法-250604
  • Sui Prover:将形式化验证引入 Sui
  • yFiles:专业级图可视化终极解决方案
  • 2025年6月4日第一轮
  • Unity大型项目资源框架
  • 运行labelme
  • 【C/C++】析构函数好玩的用法:~Derived() override
  • day44python打卡
  • AI 基础应用与提示词工程
  • 深入理解计算机进制:从原理到 C++ 实现