Spring Boot 集成 Sentinel 实现限流与降级需引入 starter 依赖、配置控制台地址,通过 @SentinelResource 注解定义资源及 blockHandler/fallback 方法,并在控制台配置限流/熔断规则,支持 URL 清洗与热点参数限流。

在 Spring Boot 中集成 Sentinel 实现接口限流与降级,核心是引入依赖、配置规则,并通过注解或编程方式定义保护逻辑。Sentinel 提供了开箱即用的 Web 适配和丰富的控制台支持,实际使用并不复杂。
添加依赖与基础配置
在 pom.xml 中引入 Sentinel 的 Spring Boot Starter:
同时在 application.yml 中指定 Sentinel 控制台地址(用于动态管理规则):
spring:cloud:
sentinel:
transport:
dashboard: localhost:8080
port: 8719
启动 Sentinel 控制台后,应用首次访问任意接口会自动注册,即可在控制台查看簇点链路并配置规则。
使用 @SentinelResource 注解实现限流与降级
在 Controller 或 Service 方法上添加 @SentinelResource,指定资源名、限流处理逻辑和降级回调:
@GetMapping("/api/data")@SentinelResource(
value = "getData",
blockHandler = "handleBlock",
fallback = "handleFallback"
)
其中:
- value 是资源唯一标识,也是控制台中配置规则时的资源名
- blockHandler 处理限流/熔断触发时的阻塞逻辑,方法需为 public static,签名与原方法一致并追加 BlockException 参数
- fallback 处理业务异常(如运行时异常)导致的降级,方法签名与原方法一致,可选 Throwable 参数
示例 fallback 和 blockHandler 方法:
public static String handleFallback(Throwable e) {return "服务暂时不可用,请稍后再试";
}
public static String handleBlock(String param, BlockException ex) {
return "请求过于频繁,请稍后再试";
}
在控制台配置限流与熔断规则
Sentinel 控制台(http://localhost:8080)提供可视化配置:
- 限流规则:设置 QPS 阈值、流控模式(直接/关联/链路)、流控效果(快速失败/Warm Up/排队等待)
- 熔断降级规则:基于慢调用比例、异常比例或异常数触发,配置统计时长、熔断时长等
- 规则默认保存在内存中;如需持久化,需对接 Nacos、ZooKeeper 或 Apollo
配置后实时生效,无需重启应用。注意:若未看到资源名出现在“簇点链路”,请确认接口已被至少一次真实请求触发,且未被 Spring MVC 的 HandlerInterceptor 拦截跳过。
自定义 URL 限流与热点参数限流
默认情况下,Sentinel 会自动将每个 HTTP 接口路径作为资源名(如 /api/data)。如需更细粒度控制:
- 使用 UrlCleaner 统一清洗路径(如过滤查询参数),避免相同接口因参数不同产生多个资源
- 对含 ID、type 等变量的接口,可用 热点参数限流:在控制台为资源配置参数索引(如第 0 个参数)、QPS 阈值及例外项(如 admin 用户不限流)
- 也可在代码中通过 SphU.entry() 编程式定义资源,适合非 Web 场景或动态资源名
例如对用户 ID 做热点限流,可在 @SentinelResource 的 value 中固定资源名,并在 blockHandler 中结合参数做定制响应。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











