当前位置: 首页 > 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)或需长期监控的实例

http://www.lqws.cn/news/161587.html

相关文章:

  • SDC命令详解:使用set_fanout_load命令进行约束
  • 可穿戴设备:健康监测的未来之眼
  • clickhouse常用语句汇总——持续更新中
  • 牛客小白月赛113
  • Git的由来与应用详解:从Linux内核到现代开发的革命性工具
  • windows server2019 不成功的部署docker经历
  • [特殊字符] 一文了解目前主流的 Cursor AI 免费续杯工具!
  • AI时代的弯道超车之第二十四章:AI伦理和版权问题
  • 智慧园区数字孪生全链交付方案:降本增效30%,多案例实践驱动全周期交付
  • STM32入门教程——OLED调试工具
  • Elasticsearch最新入门教程
  • vue3 eslint ts 关闭多单词命名检查
  • AirSim/Cosys-AirSim 游戏开发(二)使用自定义场景
  • 大模型学习
  • adb 连不上真机设备问题汇总
  • uniapp微信小程序视频实时流+pc端预览方案
  • 音视频之视频压缩编码的基本原理
  • Rust Floem UI 框架使用简介
  • 从《现实不似你所见》探寻与缘起性空的思想交织
  • OPenCV CUDA模块目标检测----- HOG 特征提取和目标检测类cv::cuda::HOG
  • 基于STM32设计的水资源监测系统
  • 前缀和题目:逐步求和得到正数的最小值
  • PySpark性能调优手册:大数据处理中的避坑与实践
  • 最小硬件系统概念及其组成
  • 数据质量是什么意思?怎样做好数据质量监控?
  • ROS2 节点类中要避免While true 循环
  • Spring AI(11)——SSE传输的MCP服务端
  • 拷贝构造函数
  • (头歌作业)-6.5 幻方(project)
  • 在使用一些不用驱动大电流的设备就可以用stm32的自己的上下拉但是本身上下拉不就是给iicspi这些他通信给信号的吗中怎么还跟驱动能力扯上了有什么场景嘛