下面给你一套Sentinel 在 Spring Cloud Alibaba 里最常见、最“能跑起来”的用法:从「接入 → 控制台 → 对接口限流/熔断 → 动态规则(Nacos)」一步到位。
1)你需要先理解 Sentinel 的两部分
- 客户端(埋点 + 执行规则) :集成在你的业务服务里
- Dashboard 控制台(看监控 + 推规则) :一个独立 Spring Boot 应用
控制台启动方式(示例把控制台端口设为 8858):
java -Dserver.port=8858 \
-Dcsp.sentinel.dashboard.server=localhost:8858 \
-Dproject.name=sentinel-dashboard \
-jar sentinel-dashboard.jar
控制台就是标准 Spring Boot 应用,直接跑 jar 即可。
2)业务服务引入依赖
如果你用 Spring Cloud Alibaba,一般就是引 starter(版本用你项目 BOM 对齐即可):
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
(Maven Central 能看到当前新版本坐标,例如 2025.x 线)
3)业务服务最小配置:让它出现在 Dashboard
application.yml(关键是 dashboard 地址 + transport 端口):
spring:
application:
name: order-service
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8858
port: 8719
说明:
spring.cloud.sentinel.transport.port会在业务机器上起一个 HTTP Server(默认常用 8719),用于和控制台交互(接收推送规则、上报心跳等)。- 你会经常看到 “8719 端口为什么被占用”,就是这个机制(可改)。
启动顺序建议:先启动 Dashboard → 再启动业务服务 → 访问一次接口产生流量,服务才会出现在控制台里(Sentinel 是“有流量才显示/才有资源”的思路)。
4)对 HTTP 接口做限流(最常用)
4.1 直接对 Controller 接口限流(默认资源=URL)
比如你的接口:GET /api/orders
你到 Dashboard:
-
簇点链路:能看到
/api/orders -
进入该资源 → 流控规则
- QPS:比如
count=10 - 超过 10QPS 就被限流(返回 BlockException)
- QPS:比如
这套是最快上手的“对 URL 做保护”。
4.2 自定义资源名 + 降级兜底(更企业级)
用 @SentinelResource 给资源命名,并提供 blockHandler/fallback(不同异常走不同兜底):
- blockHandler:被限流/熔断触发时走这里
- fallback:业务异常/超时等走这里
(你贴一下你是 MVC 还是 WebFlux、是否用 Feign,我可以给你对应的最标准示例。)
5)熔断降级怎么配(Degrade / Circuit Breaker)
在 Dashboard 对某资源加 “降级规则” ,常见维度:
- 慢调用比例(RT 过高就熔断)
- 异常比例/异常数(错误率高就熔断)
当触发熔断时,该资源会在一段时间内快速失败(走 blockHandler/fallback),避免把下游打死。
6)生产必备:规则不要只存在 Dashboard 内存里(要动态持久化)
Sentinel 官方建议生产用 动态规则数据源(Nacos / Apollo / ZK / Redis…)
6.1 用 Nacos 做规则中心(典型配置)
你在业务服务里加 datasource 配置(示例:流控规则 flow):
spring.cloud.sentinel.datasource.ds.nacos.server-addr=127.0.0.1:8848
spring.cloud.sentinel.datasource.ds.nacos.data-id=order-service-flow-rules
spring.cloud.sentinel.datasource.ds.nacos.group-id=DEFAULT_GROUP
spring.cloud.sentinel.datasource.ds.nacos.rule-type=flow
然后在 Nacos 配置中心创建 data-id=order-service-flow-rules,内容放 JSON(数组):
[
{
"resource": "/api/orders",
"limitApp": "default",
"grade": 1,
"count": 10,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
(JSON 字段含义:resource 资源名、count 阈值、grade=1 表示 QPS 等)
7)在项目里最常见的 3 个落地点
- 入口保护(HTTP 接口) :对
/api/**做 QPS、热点参数限流 - 出口保护(调用下游) :Feign/RestTemplate/WebClient 调用下游时做熔断+隔离
- 网关层统一保护(Gateway Sentinel) :路由级别限流、按 API 维度限流