如何将Spring Boot与Sentinel结合实现QPS限流?
摘要:摘要 介绍Spring Boot 4 如何集成流量治理神器Sentinel实现QPS限流。 目录Sentinel简介启动 Sentinel 控制台下载sentinel访问 Sentinel 控制台注解@SentinelResource使用方
摘要 介绍Spring Boot 4 如何集成流量治理神器Sentinel实现QPS限流。
目录Sentinel简介启动 Sentinel 控制台下载sentinel访问 Sentinel 控制台注解@SentinelResource使用方法用@SentinelResource限流统一处理Sentinel异常|done结束语Reference
Sentinel简介
什么是Sentinel?随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由/调度、流量控制、流量整形、熔断降级、系统自适应过载保护/实例摘除、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
同一个资源可以创建多条限流规则。Sentinel底层中的 FlowSlot 会对该资源的所有限流规则依次遍历,直到有规则触发限流或者所有规则遍历完毕。
在实际的项目开发中,一般不会直接写类似《Spring Boot整合Sentinel之流量控制入门》中那段限流入门演示代码,通常需要将Sentinel集成到应用框架中。本文以《一步步搭建JDK 21 Spring Boot项目》搭建的Spring Boot项目为基础,展示如何将Sentinel集成到Spring Boot项目中,并基于注解 @SentinelResource 进行限流。demo中只介绍了qps限流策略,它有多种策略备选,请根据业务需要自行选定。
启动 Sentinel 控制台
Sentinel 的使用可以分为两个部分:
控制台(Dashboard):控制台主要负责管理规则推送、监控、集群限流、分配管理、机器发现等。
核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
下载sentinel
从sentinel控制台传送门下载需要的sentinel jar。
我下载了当前最新版v1.8.9。下载后在Mac 终端进入jar包存放目录后,执行命令 java -Dserver.port=8080 -jar sentinel-dashboard-1.8.9.jar 即可启动控制台。默认端口是8080,为了避免端口好冲突,可以设置为诸如9000等。
访问 Sentinel 控制台
在浏览器访问sentinel控制台地址http://localhost:8080或者http://127.0.0.1:8080/即可进入如下登录页面,默认账号密码都是 sentinel。恭喜你!此时此刻sentinel下载运行成功。
Sentinel 开源控制台支持实时监控和规则管理。接入控制台的步骤如下:
spring.cloud.sentinel.transport.dashboard=localhost:8080
spring.cloud.sentinel.transport.heartbeat-interval-ms=500
spring.cloud.sentinel.eager=true
配置 heartbeat-interval-ms 用于指定应用与 Sentinel 控制台之间的心跳上报间隔,单位是毫秒。配置为 500 表示
👉 应用每 500ms(0.5 秒) 向 Sentinel Dashboard 发送一次心跳,用于上报实例存活状态和基础运行信息。
应用启动时 立即初始化 Sentinel 核心组件并向控制台发起连接,而不是等到第一次流量进入时再初始化。
配置 spring.cloud.sentinel.eager=true表示应用启动时 立即初始化 Sentinel 核心组件并向控制台发起连接,而不是等到流量第一次进入时再初始化。两者组合使用的整体业务含义:
✅ Sentinel 在应用启动阶段即完成初始化,服务一上线就受到限流与熔断保护;
✅ 应用与控制台之间保持高频心跳,同步实例状态更及时;
✅ 更有利于稳定性监控、规则推送和快速问题预警;
注解@SentinelResource使用方法
简单介绍下注解@SentinelResource中各个属性:
value - 指定资源的名称
blockHandler - 服务限流后会抛出BlockException异常,此属性用来指定一个函数(方法)来处理BlockException异常的。
