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:08 阅读更多 →
DRF 3.x Format Suffixes 格式后缀使用示例和配置方法

DRF 3.x Format Suffixes 格式后缀使用示例和配置方法

在现代Web开发中,API已经成为了核心架构的一部分。Django Rest Framework(简称DRF)是Python中一个强大且广泛使用的库,帮助开发者快速构建高效且灵活的API。在API开发中,如何支持客户端使用不同的响应格式是一项重要的需求。为了满足这一需求,DRF引入了格式后缀机制,通过…

2026/9/24 16:00:08 阅读更多 →
FW系列:炒菜机什么时候下料,该由温度说了算

FW系列:炒菜机什么时候下料,该由温度说了算

爆香要油温到位,收汁要水分收得住,青菜要断生即出。这些判断在厨师手里靠眼睛和声音,在炒菜机里只能靠数据。数据给得对不对,直接决定这道菜是做出来的,还是照做出来的。锅的难处在于它不停:一边被加热&…

2026/9/24 16:00:08 阅读更多 →

最新新闻

AI Agent 脚手架系统架构设计:基于 Spring AI + Google ADK 的三层架构与技术选型实践

AI Agent 脚手架系统架构设计:基于 Spring AI + Google ADK 的三层架构与技术选型实践

文档教程后端 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、…

2026/9/24 16:35:42 阅读更多 →
可白嫖源码-----课程设计---毕业设计-- springboot小学生英语学习APP[编号:project62773](案件分析)

可白嫖源码-----课程设计---毕业设计-- springboot小学生英语学习APP[编号:project62773](案件分析)

本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。 有需要完整资源的同学,可以在评论区留言【资料或领源码】,我会一 一回复站内私信,发送完整文件 摘 要 随着…

2026/9/24 16:35:42 阅读更多 →
ToastFish 完整指南:Windows 通知栏刷完日语能力考 N1-N5 词库

ToastFish 完整指南:Windows 通知栏刷完日语能力考 N1-N5 词库

ToastFish 完整指南:Windows 通知栏刷完日语能力考 N1-N5 词库 【免费下载链接】ToastFish 一个利用摸鱼时间背单词的软件。 项目地址: https://gitcode.com/GitHub_Trending/to/ToastFish ToastFish 是一款开源的 Windows 桌面软件,用 Windows 通…

2026/9/24 16:35:42 阅读更多 →
用 trackerslist 给 qBittorrent 配好 81 个公共 BitTorrent Tracker,5 分钟避坑

用 trackerslist 给 qBittorrent 配好 81 个公共 BitTorrent Tracker,5 分钟避坑

用 trackerslist 给 qBittorrent 配好 81 个公共 BitTorrent Tracker,5 分钟避坑 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 下载卡在 99% 好几天&#xff…

2026/9/24 16:35:42 阅读更多 →
Relay Typesafe Updaters 全面指南:用 `readUpdatableQuery` 与 `readUpdatableFragment` 安全地命令式修改 Store 数据

Relay Typesafe Updaters 全面指南:用 `readUpdatableQuery` 与 `readUpdatableFragment` 安全地命令式修改 Store 数据

前端开发工具 【免费下载链接】relay Relay is a JavaScript framework for building data-driven React applications. 项目地址: https://gitcode.com/gh_mirrors/relay29/relay 点击查看 免费下载 Relay 的 Typesafe Updaters(类型安全更新器&#x…

2026/9/24 16:35:42 阅读更多 →
django CMS 2.2 升级指南:依赖重构、权限增强与向后不兼容变更全解析

django CMS 2.2 升级指南:依赖重构、权限增强与向后不兼容变更全解析

CMS后端 【免费下载链接】django-cms The easy-to-use and developer-friendly enterprise CMS powered by Django 项目地址: https://gitcode.com/gh_mirrors/dj/django-cms 点击查看 免费下载 django CMS 2.2 是一次以"工程化收敛"为核心的版本升级&a…

2026/9/24 16:34:42 阅读更多 →

日新闻

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

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

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

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →