Spring Cloud Alibaba 2025.0.0.0 配套搭建 Sentinel Dashboard 1.8.9
摘要
-
依据 Spring Cloud Alibaba 版本发布说明,搭建与 Spring Cloud Alibaba 2025.0.0.0 对应的 Sentinel Dashboard 1.8.9。
-
本文侧重 Dashboard 单机搭建(JAR / Docker / systemd),并补充应用侧接入、OpenFeign / RestTemplate / Gateway 适配,以及 Nacos 规则持久化。
-
生产推荐:规则持久化到 Nacos(Push 模式);Dashboard 可选(仅监控时需要),限流生效不依赖控制台。
-
同版本配套的 Nacos Server 见 Spring Cloud Alibaba 2025.0.0.0 配套搭建 Nacos 3.0.3。
一、版本对照
1. Spring Cloud Alibaba 2025.0.x 适配关系
摘自官方 版本发布说明:
| Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
|---|---|---|
| 2025.0.0.0 | 2025.0.0 | 3.5.0 |
同页「组件版本关系」中,与 2025.0.0.0 对应的 Sentinel 版本为:
| Spring Cloud Alibaba Version | Sentinel Version |
|---|---|
| 2025.0.0.0 | 1.8.9 |
对比:同属 2025.x 的
2025.1.0.0亦使用 Sentinel1.8.9,服务端 Dashboard 版本可共用。
2. 环境准备
| 项目 | 要求说明 |
|---|---|
| Sentinel Dashboard 1.8.9 | JDK 1.8+ 即可(也可直接用 JDK 17) |
| Docker(可选) | Docker 20+ |
端口规划(与 Nacos 同机时建议错开控制台端口):
| 用途 | 端口 | 说明 |
|---|---|---|
| Sentinel Dashboard | 8858 |
本文示例端口;默认官方示例常用 8080,易与 Nacos 3.x 控制台冲突 |
二、搭建 Sentinel Dashboard 1.8.9
官方发布包:Sentinel v1.8.9 Release(资源文件 sentinel-dashboard-1.8.9.jar)。
控制台说明见 Sentinel Wiki · Dashboard。
1. 方式一:JAR 直接启动(推荐)
1 | mkdir -p /usr/local/sentinel && cd /usr/local/sentinel |
访问:http://127.0.0.1:8858
默认账号 / 密码:sentinel / sentinel(生产务必修改)。
2. 方式二:Docker 启动
官方在 sentinel-dashboard 目录提供 Dockerfile(1.8.9 / 1.8 分支均有)。镜像构建时会从 GitHub Release 再下载 sentinel-dashboard-1.8.9.jar,因此构建机需能访问 GitHub;网络不稳时优先用上文「方式一」官方 JAR。
构建前必读
- 基础镜像失效:官方 Dockerfile 的基础镜像
openjdk:8-jre-slim已在 Docker Hub 上失效,无论用下面(1)(2)(3)哪种方式,都需先修改Dockerfile中的FROM(例如改为openjdk:8u212-jre-slim),再执行docker build。具体替换命令与 slim / 非 slim 说明见下文 (3)。- GitHub 下载失败:官方 Dockerfile 在构建阶段会通过
curl访问release-assets.githubusercontent.com拉取 JAR。若出现curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL,说明 Docker 构建网络无法稳定访问 GitHub Release(国内环境较常见)。此时请改用下文 (3.1)宿主机预下载 JAR,或直接用上文「方式一」JAR 启动。
docker build 的上下文必须是含 Dockerfile 的 sentinel-dashboard 目录,任选下面一种准备源码:
(1)完整克隆(最简单)
1 | git clone https://github.com/alibaba/Sentinel.git |
(2)稀疏克隆(只取 sentinel-dashboard,省流量)
1 | git clone --filter=blob:none --sparse \ |
(3)不克隆仓库,只下载 Dockerfile
官方 Dockerfile 本质是拉取 Release JAR,也可单独下载该文件后构建。
注意:官方 Dockerfile 的基础镜像为
openjdk:8-jre-slim,该标签在 Docker Hub 上已不可用(docker pull会报not found)。下载后需改为仍可拉取的标签,例如openjdk:8u212-jre-slim(与本节开头「构建前必读」一致)。
1 | mkdir -p sentinel-dashboard && cd sentinel-dashboard |
修改后的关键行应类似:
1 | FROM openjdk:8u212-jre-slim |
PS:
openjdk:8-*-slim与不带slim的镜像区别
- 带
slim:基于 Debian slim 精简根文件系统,体积更小、攻击面更小,适合只跑 JRE 的生产镜像;但预装工具更少(如部分调试命令、额外字体/locale 可能缺失)。- 不带
slim(如openjdk:8u212-jre):完整 Debian 基础层,体积更大,调试与兼容性通常更好,一般用于开发排查或对系统库有额外依赖的场景。
Sentinel Dashboard 仅依赖 JRE 跑 JAR,优先用slim即可;若构建或运行时缺库,再改用不带slim的同版本标签。
(4)构建阶段 GitHub 下载失败(SSL_ERROR_SYSCALL)
若 docker build 在 installer 阶段报错类似:
1 | curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to release-assets.githubusercontent.com:443 |
说明官方多阶段 Dockerfile 在 容器内 拉取 GitHub Release 失败。可在 宿主机 先下载 JAR,再改用本地 COPY,避免构建时再访问 GitHub:
1 | mkdir -p sentinel-dashboard && cd sentinel-dashboard |
若宿主机同样无法访问 GitHub,可在一台能下载的机器上取回 sentinel-dashboard-1.8.9.jar 后拷贝到构建目录,再执行 docker build。若不需要容器化,直接用上文「方式一」JAR 启动更简单。
(5)运行容器
1 | docker run -d \ |
访问宿主机:http://127.0.0.1:8858。
社区也有第三方镜像(如 bladex/sentinel-dashboard:1.8.9),使用前请确认来源可信;本文优先官方 JAR。
3. systemd 托管示例(可选)
1 | # /etc/systemd/system/sentinel-dashboard.service |
1 | systemctl daemon-reload |
三、应用侧快速接入(SCA 2025.0.0.0)
官方指南:SCA · Sentinel 快速开始。
1. BOM 与依赖
父 POM / 依赖管理:
1 | <dependencyManagement> |
业务模块引入:
1 | <dependency> |
Starter 会传递依赖
sentinel-* :1.8.9,与上文 Dashboard 版本对齐。
2. application.yml 示例
1 | server: |
3. 代码最小示例
1 |
|
应用启动并访问一次受保护接口后,打开 Sentinel 控制台,应能看到应用名 demo-provider 及资源 hello,随后可在控制台配置流控规则验证限流。
仅在控制台「新增流控规则」时,规则默认只推到客户端内存。应用重启或 Dashboard 重启后规则会丢。生产请接下文 「五、单台 Dashboard + Nacos 规则持久化」;本地联调可先用手写控制台规则快速验证。
四、客户端组件适配(OpenFeign / RestTemplate / Gateway)
spring-cloud-starter-alibaba-sentinel 对 Spring Cloud 生态常见 HTTP 客户端做了适配。完整说明见 SCA · Sentinel 进阶指南 · 客户端支持。
Servlet 侧的
spring.cloud.sentinel.filter.*、servlet.block-page等配置对 OpenFeign / RestTemplate 不生效,需按下面各自方式配置限流与降级处理。
1. OpenFeign
依赖:Sentinel Starter + OpenFeign(版本由 BOM 管理):
1 | <dependency> |
需显式打开开关:
1 | feign: |
示例:
1 |
|
要点:
| 项 | 说明 |
|---|---|
| 开关 | 默认不启用,必须 feign.sentinel.enabled=true |
| 资源名 | httpmethod:protocol://requesturl;上例 echo 为 GET:http://service-provider/echo/{str} |
@FeignClient |
注解属性(含 fallback / fallbackFactory 等)Sentinel 均兼容 |
| 规则配置 | 对上述资源名配 flow / degrade 即可(可写在 Nacos,见第五节) |
2. RestTemplate
对 RestTemplate Bean 加 @SentinelRestTemplate:
1 |
|
blockHandler / fallback 对应方法必须是 blockHandlerClass / fallbackClass 中的 静态方法;参数、返回值与 ClientHttpRequestInterceptor#intercept 一致,并多一个 BlockException:
1 | import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse; |
要点:
| 项 | 说明 |
|---|---|
| 注解属性 | blockHandler + blockHandlerClass(限流);fallback + fallbackClass(降级);均可选 |
| 启动校验 | 声明了 handler 但方法不存在时,应用启动直接失败 |
| 未配 handler | 被限流 / 熔断时默认返回类似 RestTemplate request block by sentinel |
| 资源名粒度 | ① GET:https://host:port/path(含路径)② GET:https://host:port(仅主机端口) |
例:GET https://www.taobao.com/test 对应资源名可为 GET:https://www.taobao.com/test 或 GET:https://www.taobao.com。
3. Spring Cloud Gateway(简述)
网关限流需额外依赖(与普通业务服务的 Starter 组合使用):
1 | <dependency> |
规则类型使用 gw-flow / gw-api-group(见第五节对照表)。熔断后的响应可通过 spring.cloud.sentinel.scg.fallback.* 配置(mode=redirect | response 等),详见 进阶指南 与 Sentinel 网关限流。
五、单台 Dashboard + Nacos 规则持久化
官方 Dashboard 不提供集群,生产更务实的做法是:把规则落到 Nacos 配置中心(Push 模式)。应用启动后从 Nacos 拉取规则并监听变更,重启不丢。单台 Dashboard 仅作可选监控面板。动态数据源说明见 SCA · Sentinel 进阶指南。
前提:已按 Spring Cloud Alibaba 2025.0.0.0 配套搭建 Nacos 3.0.3 跑通 Nacos 3.0.3(含鉴权账号密码)。
1. 架构说明
1 | 推送 / 监听(自动) |
| 角色 | 职责 |
|---|---|
| Nacos | 规则持久化与多实例一致下发(真源) |
| 业务应用 | 通过 sentinel-datasource-nacos 订阅规则并写入本地内存生效 |
| Sentinel Dashboard | 可选;集群拓扑、实时监控;打开规则页时向客户端拉取展示;开箱不写回 Nacos |
同步方向(务必分清)
| 方向 | 是否自动 | 实际链路 |
|---|---|---|
| 改 Nacos → 业务应用 | 会 | Nacos 推送 / 监听 → 客户端内存,限流立刻生效 |
| 改 Nacos → Sentinel 控制台 | 不是直推 | Nacos → 应用内存 →(控制台查客户端)→ 页面展示。控制台没有单独一份从 Nacos 同步来的规则库 |
| 改控制台 → Nacos | 不会 | 开箱 Dashboard 只推到应用内存,不写回 Nacos |
| 改控制台 → 业务应用 | 会(临时) | 写入客户端内存;重启后仍以 Nacos 为准,或下次 Nacos 发布后被覆盖 |
一句话:真源永远是 Nacos,不是控制台。
Nacos 改了会自动到应用,控制台打开规则页时通常也能查到;控制台改了不会进 Nacos。两边一起改容易互相覆盖,持久化启用后请统一在 Nacos 维护。
Dashboard 是否必须启动?
不必须。 只保证限流 / 熔断生效时,可以不启 Sentinel Dashboard:
-
sentinel-datasource-nacos在应用启动时从 Nacos 拉规则并监听变更,与 Dashboard 无关 -
不配 / 不启控制台时,流控、熔断照常工作
-
spring.cloud.sentinel.transport.dashboard也可去掉或先注释掉
Dashboard 只是可选运维面板(实时 QPS、机器列表、簇点链路等)。需要临时看监控时再启一台,把 transport.dashboard 指过去即可;规则仍以 Nacos 为准。
% note tip %
若强依赖「控制台点几下就落库」,需二次开发 Dashboard(源码自带 Nacos 推拉示例,社区亦有改版包),本文不展开,优先 Nacos 直配。
% endnote %
2. 应用依赖
在已有 spring-cloud-starter-alibaba-sentinel 之外,再引入 Nacos 数据源(版本由 SCA BOM 管理):
1 | <dependency> |
不必单独声明
nacos-client版本;与同体系 Nacos3.0.3对齐即可。若项目已引入spring-cloud-starter-alibaba-nacos-discovery/config,账号密码等可复用。
3. application.yml 示例
在第三节配置基础上增加 datasource(可并存多种 rule-type,每种对应一个 Nacos DataId)。下面一次挂上常用五类,按需删减即可:
1 | server: |
常用 rule-type 与文档对照(Nacos 中均为对应实体的 JSON 数组;下一节给出五类示例):
rule-type |
含义 | 字段说明(Wiki) | 实体类(1.8.9 源码,属性名即 JSON key) |
|---|---|---|---|
flow |
流控 | 如何使用 · 流量控制 | FlowRule |
degrade |
熔断降级 | 如何使用 · 熔断降级 | DegradeRule |
authority |
来源黑白名单 | 如何使用 · 黑白名单控制 | AuthorityRule |
system |
系统自适应保护 | 如何使用 · 系统自适应保护 | SystemRule |
param-flow |
热点参数限流 | 热点参数限流 | ParamFlowRule |
gw-flow / gw-api-group |
网关流控 / API 分组 | 网关限流 | 需配合 spring-cloud-alibaba-sentinel-gateway,示例从略 |
SCA 的 进阶指南 说明 datasource 怎么挂;字段有疑问时再对照上表
*Rule.java。
4. 在 Nacos 中创建规则配置
统一在 Nacos 控制台 → 配置管理 → 配置列表 新建,Group 均为 SENTINEL_GROUP,配置格式 为 JSON:
| Data ID | 对应 rule-type |
|---|---|
demo-provider-flow-rules |
flow |
demo-provider-degrade-rules |
degrade |
demo-provider-authority-rules |
authority |
demo-provider-system-rules |
system |
demo-provider-param-flow-rules |
param-flow |
4.1 流控 flow(demo-provider-flow-rules)
对资源 hello 限流 QPS = 2:
1 | [ |
| 字段 | 含义 |
|---|---|
resource |
资源名,与 @SentinelResource("hello") 或 URL 资源一致 |
grade |
1 = QPS,0 = 线程数 |
count |
阈值 |
strategy |
0 直接;1 关联;2 链路 |
controlBehavior |
0 快速失败;1 预热;2 排队 |
clusterMode |
单机流控保持 false |
4.2 熔断 degrade(demo-provider-degrade-rules)
异常比例熔断(grade: 1,count 为 0~1):
1 | [ |
| 字段 | 含义 |
|---|---|
grade |
0 慢调用比例;1 异常比例;2 异常数 |
count |
阈值(慢调用时表示最大 RT 毫秒;异常比例为 0~1) |
timeWindow |
熔断时长(秒) |
minRequestAmount |
熔断触发的最小请求数 |
statIntervalMs |
统计窗口(毫秒) |
slowRatioThreshold |
仅 grade: 0 时使用,慢调用比例阈值 |
4.3 授权 authority(demo-provider-authority-rules)
仅允许来源 appA、appB 访问资源 hello(白名单,strategy: 0):
1 | [ |
| 字段 | 含义 |
|---|---|
limitApp |
来源名,多个用英文逗号分隔 |
strategy |
0 白名单;1 黑名单 |
% note tip %
授权规则依赖请求「来源」标识。Web 场景需实现 RequestOriginParser(解析 Header / 参数等为 origin),否则 limitApp 对不上,规则不按预期生效。
% endnote %
4.4 系统保护 system(demo-provider-system-rules)
入口级自适应保护(对全部入口生效,无单独 resource;未用到的指标保持 -1 表示不启用):
1 | [ |
| 字段 | 含义 |
|---|---|
highestSystemLoad |
系统 Load1 阈值(主要 Linux 有效) |
highestCpuUsage |
CPU 使用率阈值,范围 [0, 1] |
avgRt |
所有入口平均 RT 阈值(毫秒) |
maxThread |
入口最大并发线程数 |
qps |
所有入口总 QPS 阈值 |
4.5 热点参数 param-flow(demo-provider-param-flow-rules)
对资源 hello 的第 0 个参数默认 QPS = 5;参数值 1001 单独放开到 QPS = 10:
1 | [ |
| 字段 | 含义 |
|---|---|
paramIdx |
热点参数在 args 中的下标,从 0 起 |
count |
该参数维度的默认阈值 |
grade |
1 = QPS,0 = 线程数 |
paramFlowItemList |
例外项:某具体参数值使用单独阈值 |
object / classType |
例外参数值及其类型(如 int、long、java.lang.String) |
% note tip %
热点规则必须把参数传入 Sentinel 埋点,例如 SphU.entry("hello", EntryType.IN, 1, userId),paramIdx: 0 即对应第一个 args。仅写 @SentinelResource("hello")、调用时不传参,热点规则不会按参数生效。
% endnote %
5. 验证步骤
| 步骤 | 操作 | 预期 |
|---|---|---|
| 1 | 发布 Nacos 配置后启动(或已启动)应用 | 日志无 datasource 加载失败;可压测 /hello 被限流(无需 Dashboard) |
| 2 | (可选)打开 Sentinel Dashboard | 可见应用与资源;规则列表可能因数据源来源显示为「动态规则」侧生效 |
| 3 | 修改 Nacos 中 count 并发布 |
客户端秒级感知(监听推送),无需重启 |
| 4 | 重启应用(任意是否启 Dashboard) | 规则仍从 Nacos 加载,限流行为不变 |
若同时在 Dashboard 里手改规则 又在 Nacos 里改规则,客户端终态以最后一次写入内存的规则为准,容易踩坑。持久化启用后,请统一在 Nacos 维护。
6. 可选:Dashboard 侧双向推送(源码改造)
开箱 Dashboard 不会把控制台改动写回 Nacos。下文 6.2~6.4 按推荐路线介绍 Dashboard 侧改造(V2 + Nacos Provider/Publisher);若在网上看到「客户端 WritableDataSource 反写 Nacos」的做法,见本章末尾 6.5 作对照了解即可。
官方在 1.8.9 源码里只放了一套 流控规则 的 Dashboard 改造示例(不是完整生产方案),且位于 src/test,发布包 JAR 里看不到。
6.1 代码到底在哪(为何在仓库里不好找)
克隆并切到 tag 后路径为(浏览器可直接打开):
| 文件 | GitHub 路径(tag 1.8.9) |
|---|---|
| DataId / Group 常量 | .../rule/nacos/NacosConfigUtil.java |
Nacos ConfigService Bean |
.../rule/nacos/NacosConfig.java |
| 从 Nacos 拉流控 | .../rule/nacos/FlowRuleNacosProvider.java |
| 写回流控到 Nacos | .../rule/nacos/FlowRuleNacosPublisher.java |
对应本地目录:
1 | sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/ |
找不到时常见原因:
-
只下了
sentinel-dashboard-1.8.9.jar(不含src/test) -
在
src/main里搜(示例默认不在 main) -
看了错误分支 / 未切到
1.8.9 -
以为还有 degrade / authority 等示例——没有;官方 test 样例 只有 flow,其它规则类型需自行照抄扩展
官方样例约定与本文一致性较好:
-
Group:
SENTINEL_GROUP(见NacosConfigUtil.GROUP_ID) -
DataId:
{app}-flow-rules(见FLOW_DATA_ID_POSTFIX = "-flow-rules"),与上文demo-provider-flow-rules一致
6.2 改造步骤(以流控双向同步为例)
1 | git clone https://github.com/alibaba/Sentinel.git |
步骤 1:放开 Nacos 依赖(去掉 test scope)
编辑 sentinel-dashboard/pom.xml,将:
1 | <dependency> |
改为(删除 <scope>test</scope>,必要时升到与 Nacos 3.x 兼容的客户端版本):
1 | <dependency> |
步骤 2:把 test 样例拷到 main
1 | mkdir -p src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos |
步骤 3:改 NacosConfig,接上 Nacos 3.x 地址与鉴权
官方默认是 ConfigFactory.createConfigService("localhost"),对 Nacos 3.x(含鉴权、端口 8848)不够用。建议改成可配置,例如:
1 |
|
(也可用 application.properties + @Value 注入,避免把密码写死在代码里。)
步骤 4(建议):发布时转成客户端可直接消费的 FlowRule JSON
官方 encoder 直接 JSON.toJSONString(List<FlowRuleEntity>),会带上 app / gmtCreate 等控制台字段。客户端 rule-type: flow 一般能忽略多余字段,但更干净的做法是发布前 toRule():
1 |
|
decoder 仍可 JSON.parseArray(s, FlowRuleEntity.class)(字段重合部分能填上;打开规则页时 Controller 还会补 app)。
步骤 5:让 FlowControllerV2 使用 Nacos 的 Provider / Publisher
编辑 com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2.java。该类通过 @Qualifier 注入规则读写 Bean;默认走内存实现,需 只改两个 Qualifier 名,指向步骤 2 拷到 main 的 Nacos 实现(@Component("flowRuleNacosProvider") / @Component("flowRuleNacosPublisher")):
修改前(默认,读写内存,不写 Nacos):
1 |
|
修改后(读写 Nacos)——仅替换 Qualifier 中的 Bean 名:
1 |
|
即:flowRuleDefaultProvider → flowRuleNacosProvider,flowRuleDefaultPublisher → flowRuleNacosPublisher。字段类型与其它代码不用动。
必须走 V2 接口(/v2/flow/**)。V1(/v1/flow/**)仍是推客户端内存,改完 Provider 也不写 Nacos。
步骤 6:前端菜单切到 V2 流控页
1.8.9 默认侧边栏「流控规则」指向 V1:
1 | <!-- sidebar.html --> |
改为(注意:V2 的 state 名是 dashboard.flow,URL 为 /v2/flow/:app):
1 | <a ui-sref="dashboard.flow({app: entry.app})">流控规则</a> |
文件:src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html。
簇点链路里「加流控」走的是 identity.js + FlowServiceV1,同样要改:
-
FlowServiceV1→FlowServiceV2 -
跳转路径
/dashboard/flow/→/dashboard/v2/flow/
文件:src/main/webapp/resources/app/scripts/controllers/identity.js。
步骤 7:打包替换官方 JAR
1 | # 在仓库根目录或 dashboard 模块按官方方式打包 |
6.3 改造后如何验证
| 步骤 | 预期 |
|---|---|
| 控制台打开应用 →「流控规则」(V2)新增规则并保存 | Nacos 出现 / 更新 demo-provider-flow-rules(Group=SENTINEL_GROUP) |
应用已配置 rule-type: flow 数据源 |
客户端自动收到新规则并限流 |
在 Nacos 改 count 后刷新控制台 V2 流控页 |
能读到最新配置 |
6.4 能力边界
-
官方样例 只覆盖 flow;熔断 / 授权 / 系统 / 热点需自行增加成对的 Provider/Publisher,并改对应 Controller(它们默认也不是 V2 + DynamicRule 模式)。
-
运维成本明显高于「应用直连 Nacos、控制台只做监控」。中小型环境通常 不必 做本节改造。
7. 附录:客户端 WritableDataSource 写回 Nacos(了解即可)
网上另一种常见做法是 不改 Dashboard,而在客户端注册 写数据源:Dashboard(默认 V1)把规则推到客户端内存后,Sentinel transport 模块回调 WritableDataSource.write(),由客户端把规则 反写 到 Nacos。
1 | Dashboard(V1 默认) |
官方 FileDataSourceInit 演示的就是这个钩子——只不过写的是 本地文件,不是 Nacos:
1 | // 读:注册到 RuleManager(Push 模式常规做法) |
注意:sentinel-datasource-nacos 1.8.9 官方只有 NacosDataSource(只读),没有 NacosWritableDataSource;网上教程里的写 Nacos 实现多为 社区自写(在 write() 里调 configService.publishConfig()),或通过 InitFunc / @PostConstruct 注册到 WritableDataSourceRegistry。
与上文 6.2 Dashboard 改造 对比:
| 客户端 WritableDataSource 反写 | Dashboard V2 + Nacos Provider/Publisher | |
|---|---|---|
| 改动范围 | 每个业务应用 | 只改 Dashboard |
| 能否用默认 V1 控制台 | 能 | 需切 V2 页面 + 改后端 |
| 官方 Push 模式态度 | 不推荐 客户端反写配置中心 | 推荐 |
| 规则维度 | V1 按 机器(ip:port)推送 | V2 按 应用(app)读写 |
| 多实例 | 每台实例各写一次 Nacos,易覆盖/冲突 | Dashboard 统一写一份 {app}-flow-rules |
官方 在生产环境中使用 Sentinel 明确:Push 模式正确链路是 控制台 → 配置中心 → 客户端读数据源 → 内存,而不是客户端收到 Dashboard 推送后再写 Nacos(客户端已监听同一 DataId 时,可能 重复更新;多实例还会 争抢写)。WritableDataSourceRegistry 的设计场景是 Pull 模式 + 本地文件 持久化。
适用场景:单机联调、不想改 Dashboard 源码 时可了解此路;生产多实例仍建议走 6.2 Dashboard 改造,或更简单——只在 Nacos 维护规则(上文第五节 Push 模式),Dashboard 仅做监控。
六、联调检查清单
| 检查项 | 预期结果 |
|---|---|
| Nacos 规则配置 | 对应 DataId / Group 已发布且 JSON 合法 |
| 规则持久化 / 生效 | 改 Nacos 后限流生效;重启应用后仍在(可不启 Dashboard) |
| Sentinel Dashboard(可选) | 若已启动:http://127.0.0.1:8858 可登录;触发流量后可见应用 |
| 客户端版本 | sentinel 1.8.9(由 SCA BOM 引入) |
常见问题:
-
控制台无应用:需真实流量触发一次资源;检查
spring.cloud.sentinel.transport.dashboard指向与 Dashboard 实际端口一致。 -
端口冲突:与 Nacos 3.x 同机时,勿再占用
8080;本文默认使用8858。 -
Nacos 规则不生效:核对
data-id/group-id/namespace/ 账号密码;rule-type与配置内容类型一致;看应用日志是否有 datasource 转换失败。 -
控制台改了规则,重启又没了:未接 Nacos,或未把 Dashboard 改成写回 Nacos;请以 Nacos 为准。
-
版本混用:按 SCA 官方矩阵固定 Sentinel 1.8.9 最省事。