如何将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异常的。
阅读全文