用豆包辅助从头开始学习Java Spring Cloud(十):Nacos 权重 + 上下线感知
系列说明:本系列为 Spring Cloud 从零学习笔记的第二阶段,基于 SpringBoot 2.7.x + Spring Cloud Alibaba 2022.0.0.0,面向后端初学者,侧重原理理解与工程实践思维,非纯粹源码解读。
本文目标:掌握 Nacos 实例权重流量分配、服务下线感知机制,了解 Nacos 集群、Eureka、Consul 注册中心对比。
前置知识:已经掌握 OpenFeign 声明式调用、Spring Cloud LoadBalancer 负载均衡、Sentinel 熔断降级基础。
前言
上一篇完成了 OpenFeign 远程调用、LoadBalancer 负载均衡、Sentinel 熔断降级,搭建 order‑service 订单微服务,实现微服务内部通信。
本篇动手实操 Nacos 权重配置实现流量灰度分配,理解消费者本地实例缓存带来的各类现象;完成服务下线感知实验;同时横向学习 Nacos 集群高可用原理,对比 Eureka、Consul 主流注册中心的特性与取舍。
第一部分、Nacos 实例权重配置
知识点:权重控制流量分配,权重取值范围 0 ~ 100;权重越大分到的流量越多;权重 = 0 不会接收新流量,可以做灰度、版本下线。
⚠️重点:order‑service 本地会缓存服务实例列表,缓存默认 30 秒,修改权重不会立刻生效,需要等待缓存刷新。
操作步骤
-
打开 Nacos 控制台
http://127.0.0.1:8848/nacos -
菜单:【服务管理】→【服务列表】→找到
user‑service→ 点击右侧【详情】
-
列表看到两个实例:
- 8081:把权重改为
1 - 8082:把权重改为
9
- 8081:把权重改为
-
点击「确定」保存配置。
理论流量占比:8081 约 10%,8082 约 90%。
- 等待 30 秒缓存过期,浏览器疯狂刷新接口
http://127.0.0.1:8090/order/create,观察后端控制台打印的端口。
✅预期现象:绝大多数请求落到 8082,少量请求落到 8081。
如果刚改完权重,还是对半分,属于客户端缓存,等待一会就变化,不是 bug。
面试考点:权重是Nacos 服务端配置,由消费者客户端本地负载均衡组件实现流量分配,服务提供者本身不知道自己权重是多少。
然而,现在和预期不一样,实际大量刷新之后,统计了一下,两个端口实际出现频率差不多。
需要再次修改yml:
spring:
application:
name: order-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
# sentinel控制台地址
dashboard: 127.0.0.1:8858
port: 8719 # 客户端和控制台通信端口,默认8719,被占用自动+1
client-ip:
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/qq_39225113/article/details/164148544




