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

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)或需长期监控的实例

相关文章:

  • 免费工具-微软Bing Video Creator
  • 【十年技术演进深度解构:车载充电机(OBC)将成为新能源汽车的“能源大脑”】
  • 软件工程:如何做好软件产品
  • 高效集成AI能力:使用开放API打造问答系统,不用训练模型,也能做出懂知识的AI
  • 倍福 PLC程序解读
  • Linux服务器如何安装wps?
  • 可编辑PPT | 基于大数据中台新能源智能汽车应用解决方案汽车大数据分析与应用解决方案
  • 新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
  • 人工智能的社交课:从博弈游戏到健康关怀
  • elasticsearch-8.17.4
  • Windows 10 IoT 系统深度定制指南:从环境搭建到工业部署
  • 【物联网-S7Comm协议】
  • 桂花网蓝牙网关物联网医院动态血糖管理应用案例
  • 【学习记录】Linux 密码破解实战
  • Seata 分布式事务 XA 模式
  • 什么是分布式锁?几种分布式锁分别是怎么实现的?
  • Python-多线程
  • 渗透测试服务如何全方位评估企业安全状况并揭示潜在缺陷?
  • 哈希表入门:用 C 语言实现简单哈希表(开放寻址法解决冲突)
  • Oj系统测试报告
  • 中小企业网站设计/广东疫情动态人民日报
  • 网站怎么做百度能搜到/网络服务主要包括什么
  • 北京SEO网站优化公司/百度seo优化排名
  • 计算机网络技术就业方向网站开发/线上宣传的方式
  • 一个新手建设网站怎么简单/网站优化推广软件
  • 个人博客网页设计html模板/seo关键词排名技巧