Sentinel具体怎么使用呢

41 阅读3分钟

下面给你一套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)

这套是最快上手的“对 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 个落地点

  1. 入口保护(HTTP 接口) :对 /api/** 做 QPS、热点参数限流
  2. 出口保护(调用下游) :Feign/RestTemplate/WebClient 调用下游时做熔断+隔离
  3. 网关层统一保护(Gateway Sentinel) :路由级别限流、按 API 维度限流