2026/4/18 12:17:12
网站建设
项目流程
网站作品集,长春网站制作培训,wordpress支持拨打电话,小程序开发各平台对比Nacos 的微服务注册中心实现详解 上一节课关于docker部署的知识点的讲解#xff1a;Docker的部署使用详解 在微服务架构中#xff0c;服务数量多、实例动态变化#xff0c;如果仍然写死IP和地址进行调用#xff0c;系统会非常脆弱。 注册中心就是为了解决这个问题而存在的基…Nacos 的微服务注册中心实现详解上一节课关于docker部署的知识点的讲解Docker的部署使用详解在微服务架构中服务数量多、实例动态变化如果仍然写死IP和地址进行调用系统会非常脆弱。注册中心就是为了解决这个问题而存在的基础设施。 目录点击跳转对应章节一、注册中心核心原理二、常见注册中心对比三、Docker 部署 Nacos四、准备 MySQL 数据库五、准备 Nacos 环境变量文件六、启动 Nacos 容器七、访问 Nacos 控制台八、服务注册实战item-service九、服务发现实战cart-service十、使用 DiscoveryClient 做服务发现十一、负载均衡策略说明十二、完整调用链总结十三、核心理解总结一、注册中心核心原理在微服务远程调用中有两个基本角色服务提供者提供接口例如item-service服务消费者调用接口例如cart-service当服务变多后会出现几个问题服务地址经常变化实例会扩容或宕机调用方难以维护地址列表因此引入第三个角色注册中心其作用是存储、管理服务实例信息并实现服务实例的动态发现。注册中心三方结构系统中包含三方服务提供者服务消费者注册中心服务注册流程服务启动时会自动向注册中心注册服务名称IP 地址端口号注册中心保存这些实例信息。服务发现流程服务消费者调用流程向注册中心订阅服务列表获取实例列表本地负载均衡选择实例发起远程调用健康检查机制注册中心通过心跳机制维护实例健康服务定期发送心跳心跳机制服务实例定期发送心跳包心跳包是一个空的 HTTP 请求默认5秒发送一次到注册中心证明自己正常运行。注册中心超时未收到 → 判定宕机自动剔除实例新实例启动 → 自动注册实例变化 → 推送更新对于注册中心的简单理解注册中心 动态地址簿 健康管理器 实例调度中心动态地址簿注册中心维护服务实例的地址列表服务消费者可以从注册中心获取最新的实例地址。健康管理器注册中心通过心跳机制监控服务实例的健康状态及时发现并剔除不健康的实例。实例调度中心注册中心根据负载均衡策略为服务消费者分配可用的服务实例。注意注册中心只提供列表不做负载均衡二、常见注册中心对比注册中心出品公司特点EurekaNetflixSpringCloud 原生Nacos阿里注册 配置中心ConsulHashiCorp多语言支持一般情况下为什么选 Nacos原因如下免费开源中文资料多SpringCloud Alibaba 官方支持同时支持配置中心国内使用广泛三、Docker 部署 Nacos为了保证环境干净、部署简单、可重复搭建我们这里采用 Docker 容器方式部署 Nacos 注册中心。相比直接安装方式Docker 方式具有明显优势环境隔离不污染系统部署速度快配置简单可快速销毁重建便于团队统一环境更贴近生产部署方式3.1 部署结构说明本次部署包含两个核心容器MySQL 容器用于存储服务注册信息配置数据命名空间数据集群元数据Nacos 容器负责服务注册服务发现心跳检测实例健康管理服务列表推送3.2 前置环境要求在开始之前请确保环境满足必备软件Docker 20.x Docker Compose可选 MySQL 容器已运行端口占用检查确保以下端口未被占用8848 → Nacos 控制台 9848 → 集群通信端口 9849 → Raft 通信端口检查命令netstat-tunlp|grep8848四、准备 MySQL 数据库创建数据库CREATEDATABASEnacos_config;导入初始化表结构下载 Nacos 官方 SQLconf/nacos-mysql.sql导入到 MySQL 容器dockerexec-it mysql容器名bashmysql -uroot -p use nacos_config;source/路径/nacos-mysql.sql;五、准备 Nacos 环境变量文件新建文件custom.env内容如下MODEstandalone SPRING_DATASOURCE_PLATFORMmysql MYSQL_SERVICE_HOST你的MySQL容器IP MYSQL_SERVICE_PORT3306 MYSQL_SERVICE_DB_NAMEnacos_config MYSQL_SERVICE_USERroot MYSQL_SERVICE_PASSWORD你的密码关键点MYSQL_SERVICE_HOST 必须写 MySQL 容器IP六、启动 Nacos 容器dockerrun -d\--name nacos\--env-file ./custom.env\-p8848:8848\-p9848:9848\-p9849:9849\--restartalways\nacos/nacos-server:v2.1.0-slim七、访问 Nacos 控制台浏览器访问http://服务器IP:8848/nacos默认账号密码nacos / nacos注册中心部署完成。八、服务注册实战item-service目标把item-service注册到 Nacos。1. 添加依赖dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency说明同时支持注册 发现所有微服务都可以使用2. 配置 Nacos 地址spring:application:name:item-servicecloud:nacos:server-addr:192.168.150.101:88483. 启动服务启动后自动注册到 Nacos。控制台可见item-service4. 多实例测试修改端口再启动一个实例server:port:8082控制台可看到item-service ├── 实例1 └── 实例2九、服务发现实战cart-service目标让 cart-service 调用 item-service。1. 添加依赖dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency2. 配置地址spring:cloud:nacos:server-addr:192.168.150.101:8848十、使用 DiscoveryClient 做服务发现注入组件AutowiredprivateDiscoveryClientdiscoveryClient;获取实例列表ListServiceInstanceinstancesdiscoveryClient.getInstances(item-service);随机负载均衡ServiceInstanceinstanceinstances.get(newRandom().nextInt(instances.size()));构造调用地址Stringurlinstance.getUri()/item/id;ItemitemrestTemplate.getForObject(url,Item.class);十一、负载均衡策略说明常见负载均衡算法随机轮询IP Hash最少连接权重调度后续可以升级为SpringCloud LoadBalancer OpenFeign自动负载均衡调用。十二、完整调用链总结服务提供者启动 → 注册 → 心跳 → 健康维护注册中心存储 → 检测 → 剔除 → 推送更新服务消费者订阅 → 获取列表 → 负载均衡 → 调用十三、核心理解总结注册中心解决的不是调用问题而是地址解耦实例动态管理容错与高可用自此微服务之间不用再记住彼此地址而是通过注册中心找到彼此。