首页/新闻资讯/正文详情

Spring Cloud 学习与实践(5):Nacos 注册中心接入

发布时间:2026/9/24 16:00:05 来源:云帆数科 栏目:资讯中心
Spring Cloud 学习与实践(5):Nacos 注册中心接入
文章目录Spring Cloud 学习与实践5Nacos 注册中心接入1. 本章目标2. 为什么需要注册中心3. Nacos 在当前项目中的角色4. 启动 Nacos Server4.1 单机模式5. 三个服务添加 Nacos Discovery 依赖6. 配置三个服务的 application.yml6.1 cloud-user6.2 cloud-product6.3 cloud-order7. 启动类添加服务发现注解8. 启动顺序9. 服务、集群和实例9.1 服务9.2 实例9.3 集群10. 演练停止商品服务并观察实例变化11. 临时实例与持久实例11.1 临时实例11.2 持久实例12. 心跳与健康检查13. AP 与 CP 基础理解13.1 AP13.2 CP13.3 Nacos 不应该简单记成“只支持 AP”14. 多网卡错误 IP 问题为什么错误 IP 会导致问题常见修复方式方式 1显式指定 IP方式 2指定网卡方式 3指定优先网段15. 本章常见问题15.1 Nacos Server 和 Nacos Discovery 有什么区别15.2 服务名来自哪里15.3 概念、流程与生命周期16. 本章结论Spring Cloud 学习与实践5Nacos 注册中心接入本章目标启动 Nacos Server并将cloud-user、cloud-product、cloud-order三个业务服务注册到 Nacos理解服务、实例、集群、临时实例、持久实例以及 AP / CP 等核心概念通过停止和重启商品服务观察服务实例生命周期变化。1. 本章目标前四章已经完成第 1 章 Maven 多模块骨架 cloud-common 公共模块 第 2 章 cloud-user 用户服务 MyBatis-Plus CRUD 分页故障演练 第 3 章 cloud-product 商品服务 库存扣减 JMeter 并发超卖 数据库原子条件更新 第 4 章 cloud-order 订单服务 本地订单创建 故意保留服务边界缺陷目前三个业务服务虽然都可以独立运行但它们彼此之间还没有建立服务发现机制cloud-user 9200 cloud-product 9300 cloud-order 9400本章开始引入 Spring Cloud Alibaba 的第一个核心组件Nacos 注册中心主要完成1. 启动 Nacos Server 单机模式 2. 在三个业务服务中接入 Nacos Discovery 3. 将 cloud-user、cloud-product、cloud-order 注册到 Nacos 4. 在控制台查看服务列表和实例详情 5. 理解服务、集群、实例三个层级 6. 停止 cloud-product观察实例变化 7. 重启 cloud-product观察实例恢复 8. 理解临时实例、持久实例和 AP / CP 9. 了解多网卡错误 IP 问题及后续排查思路本章暂时不接入Nacos 配置中心 OpenFeign Gateway Sentinel Redis RabbitMQ这些能力将在后续章节中逐步加入。2. 为什么需要注册中心假设订单服务需要调用商品服务。最简单的写法是将商品服务地址写死http://localhost:9300/products/1如果系统始终只有一个商品服务实例这种方式暂时可以工作。但真实项目中商品服务可能部署多个实例cloud-product 实例 A192.168.1.10:9300 cloud-product 实例 B192.168.1.11:9300 cloud-product 实例 C192.168.1.12:9300这些实例还可能动态变化新增实例 服务重启 实例下线 机器故障 容器扩缩容如果每个调用方都手动维护地址列表维护成本会越来越高。因此需要注册中心服务启动 ↓ 向注册中心注册 服务名、IP、端口、健康状态等信息 ↓ 调用方通过服务名查询可用实例 ↓ 负载均衡选择一个实例 ↓ 发起远程调用一句话总结注册中心用于统一管理服务实例地址 避免服务调用方手动维护 IP 和端口。3. Nacos 在当前项目中的角色当前项目使用Nacos Server2.2.0本章只使用 Nacos 的注册中心能力Nacos Discovery后续第 6 章才会接入Nacos Config需要注意注册中心 配置中心是两个不同概念。能力作用注册中心管理服务实例地址和健康状态配置中心集中管理配置并支持动态刷新4. 启动 Nacos Server4.1 单机模式本地学习环境使用standalone即单机模式。Windows 环境进入nacos └── bin ├── startup.cmd └── shutdown.cmd在bin目录打开终端执行cmd startup.cmd -m standalone启动成功后浏览器访问http://127.0.0.1:8848/nacos如果控制台能够访问说明 Nacos Server 已成功启动。停止 Nacos 时执行cmd shutdown.cmd5. 三个服务添加 Nacos Discovery 依赖需要修改cloud-user/pom.xml cloud-product/pom.xml cloud-order/pom.xml在每个模块的dependencies中加入!-- Nacos Discovery 将当前 Spring Boot 服务自动注册到 Nacos。 后续其他服务可以通过服务名发现当前服务实例。 --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency子模块中不需要重复写版本号。父工程已经通过 Spring Cloud Alibaba BOM 统一约束版本。6. 配置三个服务的 application.yml6.1 cloud-user在原有配置基础上补充spring:application:# 当前服务名称。# 注册到 Nacos 后服务列表中会显示 cloud-user。name:cloud-usercloud:nacos:discovery:# Nacos Server 地址。# 当前使用本机单机模式。server-addr:127.0.0.1:88486.2 cloud-productspring:application:name:cloud-productcloud:nacos:discovery:server-addr:127.0.0.1:88486.3 cloud-orderspring:application:name:cloud-ordercloud:nacos:discovery:server-addr:127.0.0.1:8848核心配置只有两个spring.application.name spring.cloud.nacos.discovery.server-addr其中spring.application.name会作为默认服务名称注册到 Nacos。7. 启动类添加服务发现注解为了明确表示当前服务启用注册发现能力可以在三个启动类中添加EnableDiscoveryClient以CloudUserApplication为例packagecom.example.cloud.user;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;/** * 用户服务启动类。 * * EnableDiscoveryClient * 启用服务注册与发现能力。 * * 服务启动后会向 Nacos 注册 * 服务名、IP、端口等实例信息。 */EnableDiscoveryClientSpringBootApplication(scanBasePackagescom.example.cloud)publicclassCloudUserApplication{publicstaticvoidmain(String[]args){SpringApplication.run(CloudUserApplication.class,args);}}同样修改CloudProductApplication CloudOrderApplication8. 启动顺序按照下面顺序启动1. Nacos Server 2. CloudUserApplication 3. CloudProductApplication 4. CloudOrderApplication启动完成后在 Nacos 控制台进入服务管理 ↓ 服务列表可以看到cloud-user cloud-product cloud-order本地实测注册结果cloud-user 192.168.1.3:9200 cloud-product 192.168.1.3:9300 cloud-order 192.168.1.3:9400三个服务都注册到了本机局域网 IP192.168.1.3没有错误注册到 VMware、Docker、VPN 或 Hyper-V 虚拟网卡。9. 服务、集群和实例Nacos 控制台中需要理解三个层级服务 Service ↓ 集群 Cluster ↓ 实例 Instance9.1 服务服务表示一个逻辑业务能力。当前项目中有cloud-user cloud-product cloud-order9.2 实例实例表示某个服务的一次具体运行进程。例如cloud-product ↓ 192.168.1.3:9300未来商品服务可以启动多个实例cloud-product ├── 192.168.1.3:9300 ├── 192.168.1.3:9301 └── 192.168.1.3:9302它们属于同一个服务但属于不同实例。9.3 集群集群用于进一步组织实例。当前没有主动配置集群所以使用DEFAULT后续跨机房部署时可以按地域或机房划分HZ SH BJ一句话总结服务是逻辑名称 实例是具体进程 集群用于对实例进一步分组。10. 演练停止商品服务并观察实例变化确保 Nacos Server、用户服务、商品服务和订单服务都已经启动。然后停止CloudProductApplication进入 Nacos 控制台服务管理 ↓ 服务列表 ↓ cloud-product ↓ 详情观察到cloud-product 实例状态发生变化随后重新启动CloudProductApplication刷新控制台可以看到cloud-product 实例恢复本次演练说明服务启动 ↓ 实例注册到 Nacos 服务停止 ↓ 实例状态发生变化 服务重新启动 ↓ 实例重新注册11. 临时实例与持久实例Nacos 中需要理解两类实例临时实例 持久实例也可以写成ephemeral true ephemeral false11.1 临时实例更适合普通微服务应用。特点应用运行时存在 应用失联后可以被注册中心清理 适合动态扩容、缩容和重启11.2 持久实例更适合希望注册信息被保留的场景。特点实例离线后不应简单删除注册记录 可以保留实例元数据 需要通过健康状态表达当前是否可用本章不主动切换实例类型只理解差异。12. 心跳与健康检查注册中心不仅保存服务地址还需要判断实例是否仍然可用。对于临时实例可以理解为服务实例 ↓ 持续向注册中心报告状态 ↓ 注册中心维护实例健康状态 ↓ 实例长时间失联后被标记异常或清理因此当cloud-product停止后Nacos 控制台中的实例会发生变化。需要注意不要死记某个固定秒数。不同 Nacos 版本、客户端状态和网络环境下实例状态变化时间可能不同。本章重点是理解Nacos 会维护实例生命周期 不是只在启动时保存一次地址。13. AP 与 CP 基础理解分布式系统中常见CAP三个字母分别表示字母含义CConsistency一致性AAvailability可用性PPartition Tolerance分区容错性发生网络分区时系统通常需要在一致性和可用性之间做取舍。13.1 APA可用性 P分区容错性更强调网络异常时服务发现仍然尽可能可用 允许短时间内数据存在差异13.2 CPC一致性 P分区容错性更强调不同节点之间的数据尽量一致 必要时牺牲部分可用性13.3 Nacos 不应该简单记成“只支持 AP”更准确的理解是Nacos 会根据不同数据类型和业务场景 对一致性与可用性做不同侧重。当前阶段记住临时实例变化频繁更偏向可用性 持久信息和配置数据更强调一致性。14. 多网卡错误 IP 问题当前本机注册 IP192.168.1.3是正确的。但在真实环境中电脑可能存在VMware 虚拟网卡 Docker 虚拟网卡 VPN 网卡 Hyper-V 网卡 多块物理网卡Nacos 可能注册到错误地址例如192.168.56.1 172.x.x.x 127.0.0.1为什么错误 IP 会导致问题假设商品服务错误注册为127.0.0.1:9300其他机器调用时会将127.0.0.1理解为调用方自己的本机地址而不是商品服务所在机器。因此后续服务间调用会失败。常见修复方式方式 1显式指定 IPspring:cloud:nacos:discovery:ip:192.168.1.3方式 2指定网卡spring:cloud:nacos:discovery:network-interface:以太网方式 3指定优先网段spring:cloud:inetutils:preferred-networks:-192.168.1当前项目默认注册结果正确因此暂时不添加这些配置。15. 本章常见问题15.1 Nacos Server 和 Nacos Discovery 有什么区别Nacos Server 注册中心服务端 负责保存和管理实例信息 Nacos Discovery 业务服务客户端依赖 负责将当前服务注册到 Nacos 并支持后续服务发现15.2 服务名来自哪里默认来自spring:application:name:cloud-product注册后Nacos 控制台中会显示cloud-product15.3 概念、流程与生命周期16. 本章结论本章完成了Nacos Server 单机模式启动 Nacos Discovery 依赖接入 三个业务服务注册 服务列表查看 实例详情查看 实例生命周期观察 临时实例与持久实例概念 AP / CP 基础理解 多网卡错误 IP 问题说明当前项目已经具备服务注册 服务实例管理 实例上下线感知下一章将进入第 6 章Nacos 配置中心下一章会完成Nacos Config 依赖接入 bootstrap.yml DataId Group Namespace 集中配置管理 动态刷新 RefreshScope 配置刷新不生效故障演练

相关推荐

TEN Framework 集成钉钉群机器人:dingtalk_bot_tool_python 扩展的配置与 LLM 工具化实战指南
TEN Framework 集成钉钉群机器人:dingtalk_bot_tool_python 扩展的配置与 LLM 工具化实战指南

人工智能AI Agent多模态语音AI 应用 【免费下载链接】ten-framework Open-source framework for conversational voice AI agents 项目地址: https://gitcode.com/TEN-framework/ten-framework 点击查看 免费下载 本文围绕 TEN Framework 仓库内的 dingtalk_bot_to… · 2026/9/24 16:00:05

上下文塞满后,AI 变傻又烧钱:5 个省 Token 的做法
上下文塞满后,AI 变傻又烧钱:5 个省 Token 的做法

先看一组实测数字。同一个"查 100 轮资料"的任务,不做处理时上下文峰值冲到 33.5 万 Token;把自动压缩的触发点设在 18 万之后,峰值降到 16.9 万,任务收尾时只剩 5829 个 Token,活照样干完了。这组轨迹来自 … · 2026/9/24 15:59:59

DRF 3.x Caching 缓存使用示例和配置方法
DRF 3.x Caching 缓存使用示例和配置方法

在现代Web开发中,缓存是提高应用性能和响应速度的重要手段。特别是在使用Django Rest Framework (DRF) 时,合理配置和使用缓存可以显著减轻服务器的负担,提升API的响应效率。Redis作为一个强大的内存数据库,常常用于缓存系统。本文将介绍如何在DRF 3.x中配置和使用Redis缓存… · 2026/9/24 15:59:53

Prisma CLI `prisma local stop` 命令详解:停止本地开发集群
Prisma CLI `prisma local stop` 命令详解:停止本地开发集群

后端数据库GraphQL 【免费下载链接】prisma1 💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated] 项目地址: https://gitcode.com/gh_mirrors/pr/prisma1 点击查看 免费下载 prisma local stop 是 Pr… · 2026/9/24 16:35:04

SAP QM 取消UD 决策
SAP QM 取消UD 决策

SAP QM 取消UD 决策。 SAP提供了相关Notes用于取消UD决策。 C24010PA 这个批次已经做了UD 决策 C24010PA目前库存已经是非限制库存 执行操作 · 2026/9/24 16:35:04

Yii 2 与第三方代码集成实战:在 Yii 中使用外部类库,以及将 Yii 嵌入其他系统
Yii 2 与第三方代码集成实战:在 Yii 中使用外部类库,以及将 Yii 嵌入其他系统

后端Web框架 【免费下载链接】yii2 Yii 2: The Fast, Secure and Professional PHP Framework 项目地址: https://gitcode.com/gh_mirrors/yi/yii2 点击查看 免费下载 本篇技术指南围绕 Yii 2 框架的「第三方代码集成」主题展开,覆盖两大场景&#xff1… · 2026/9/24 16:35:04

隐形戴反了,会伤眼睛吗?/钟祥极博视科普
隐形戴反了,会伤眼睛吗?/钟祥极博视科普

一、先别慌,咱们钟祥街坊把这事捋清楚莫愁大道边上的奶茶店里,常有小年轻揉着眼睛抱怨:“隐形眼镜一戴上去就磨得慌,眼泪哗哗的。” 旁边人一句“是不是戴反了”,往往一语惊醒梦中人。戴反这事,十个初戴者有… · 2026/9/24 16:35:04

Chat2DB 完整上手指南:用自然语言写SQL的多数据库客户端
Chat2DB 完整上手指南:用自然语言写SQL的多数据库客户端

Chat2DB 完整上手指南:用自然语言写SQL的多数据库客户端 【免费下载链接】Chat2DB Chat2DB is a free, cross-platform, local-first database client and SQL workspace for developers, DBAs, analysts, and data teams. Connect to 40 databases, manage data, e… · 2026/9/24 16:34:58

JiuwenSymbiosis视觉感知管线深度解析:从开放词汇检测到像素到基座坐标的三维反投影
JiuwenSymbiosis视觉感知管线深度解析:从开放词汇检测到像素到基座坐标的三维反投影

JiuwenSymbiosis视觉感知管线深度解析:从开放词汇检测到像素到基座坐标的三维反投影 【免费下载链接】jiuwensymbiosis Jiuwen Symbiosis就是一个"能懂人话、看得见物理世界、长了四肢的智能助手"。用户不需要示教,不需要教它怎么抓东西&#… · 2026/9/24 16:34:58

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码