ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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 配置刷新不生效故障演练
返回列表