Spring Boot集成Sentinel流量防护
为什么你需要Sentinel流量防护
当你的接口突然被高并发刷爆,或者依赖的下游服务挂掉导致连锁故障时,原生的限流手段往往不够灵活。
阿里开源的 Sentinel流量防护 提供了实时限流、降级、熔断等能力,而且接入简单。
本文以最常见的Spring Boot应用为例,教你从零完成集成和配置。
准备工作
要跟着操作,你先得准备好这些东西:
- 一台能联网的开发机器,已安装JDK 8+ 和 Maven 或 Gradle。
- 一个Spring Boot项目(可以是新建的空项目,版本建议2.3+)。
- Sentinel控制台(可选但推荐,方便可视化管理规则)。下载地址可从GitHub Release页获取,或者直接用官方Docker镜像:
docker run --name sentinel -d -p 8858:8858 bladex/sentinel-dashboard。启动后浏览器访问http://localhost:8858,默认账号密码都是sentinel。
步骤一:引入Sentinel依赖
在Spring Boot项目的 pom.xml(Maven)或 build.gradle(Gradle)中添加Sentinel的起步依赖。
这里以Maven为例:
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
2021.0.5.0
版本号建议使用与你Spring Cloud Alibaba对齐的版本。如果不清楚,可以先去Maven中央仓库查最新的稳定版。
步骤二:配置应用连接控制台
在 application.yml 中添加Sentinel配置,指向上面启动的控制台地址:
spring:
application:
name: my-sentinel-app
cloud:
sentinel:
transport:
dashboard: localhost:8858
port: 8719
transport.dashboard 是控制台地址,port 是应用与控制台通信的端口,默认8719,确保不冲突。
步骤三:定义一个限流资源
在Spring Boot的Controller中,使用Sentinel的 @SentinelResource 注解标记需要防护的接口:
@RestController
public class DemoController {
@GetMapping("/hello")
@SentinelResource(value = "hello", blockHandler = "blockHandler")
public String hello() {
return "Hello, Sentinel!";
}
public String blockHandler(BlockException e) {
return "请求被限流了,请稍后重试";
}
}
@SentinelResource 的 value 是资源名,后续在控制台通过这个名字配置规则。blockHandler 指定限流后的降级方法。
步骤四:在控制台配置流控规则
启动应用后,打开Sentinel控制台(http://localhost:8858),左侧会看到你的应用名称。
点击进入,在“流控规则”页面点击“新增流控规则”:
- 资源名:填写
hello(与注解中一致)。 - 阈值类型:选择 QPS 或并发线程数,新手推荐 QPS。
- 单机阈值:比如设置为 5,表示每秒最多通过5个请求。
- 其他选项保持默认,保存。
避坑指南
- 控制台看不到应用:检查应用启动后是否有日志
Sentinel log: register to dashboard success。如果一直超时,可能是控制台端口被防火墙拦截,或者在application.yml中spring.cloud.sentinel.transport.dashboard写错了IP。 - 限流规则不生效:确认
@SentinelResource的value与控制台资源名完全一致(区分大小写)。另外如果使用了blockHandler,方法签名必须正确(返回类型、参数列表匹配)。 - 版本冲突:Spring Cloud Alibaba和Sentinel版本需对应,否则启动报错。去官方版本说明页确认后再引入。
效果验证
用Postman或curl连续快速访问 http://localhost:8080/hello,当请求数超过5次/秒时,会直接返回 请求被限流了,请稍后重试。
同时控制台的实时监控图表会显示流量曲线和拒绝次数。
你也可以用压测工具如 ab 验证:
ab -n 100 -c 10 http://localhost:8080/hello
观察返回的响应中部分请求被限流即可。
高频问题解答
Q:Sentinel流量防护和Hystrix有什么区别?
A:Sentinel支持实时监控、动态规则推送、更细粒度的流量控制(如热点参数限流),而Hystrix已停止维护。推荐新项目使用Sentinel。
Q:生产环境必须用控制台吗?
A:控制台让规则管理更直观,但生产建议用Nacos动态配置,避免失控。参考官方文档结合Nacos使用。
Q:限流阈值设多少合适?
A:没有固定值,需要根据接口的RT(响应时间)和机器资源预估。可以先设为峰值QPS的80%,再根据监控调整。
总结
通过以上几步,你已完成了Sentinel流量防护的集成和基础限流配置。
先按教程完整跑通,再根据业务需要开启降级、热点限流等高级功能。
遇到异常时优先回看避坑部分,大部分问题出在依赖版本或控制台连通性上。