Sentinel系列之(六)热点参数限流规则
热点参数限流规则🔥🔥
1. 基本介绍
-
基本介绍
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:
- 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
- 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。
注:热点规则仅支持QPS模式。
注:热点规则必须搭配@SentinelResource使用。
-
源码:
com.alibaba.csp.sentinel.slots.block.BlockException
-
参数例外项
是指我们设置热点规则后,参数为指定参数值时,此时的阈值是单独的或者不限流的,不受一般规则限制
参数类型指的是参数索引对应参数的类型。
2. 实战【一般规则】
基于cloudalibaba-sentinel-service8401
-
修改FlowLimitController,增加如下代码
/** * @SentinelResource注解value的值要唯一,一般就是接口路径去掉/的部分 * blockHandler只是当接口的访问违背了我们配置的Sentinel规则时限流的回调,对于接口本身触发的异常是不会作相应处理的,接口本身触发的异常可以通过fallback指定回调。 * @param p1 * @param p2 * @return */ @GetMapping("/testHotKey") @SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey") public String testHotKey(@RequestParam(value = "p1",required = false) String p1, @RequestParam(value = "p2",required = false) String p2) { //int age = 10/0; return "------testHotKey"; } //兜底方法 public String deal_testHotKey (String p1, String p2, BlockException exception){ return "------deal_testHotKey,o(╥﹏╥)o"; }
-
配置热点规则
这里的资源名配置的是接口中@SentinelResource注解value的值.
配置的参数索引是针对接口来说的,含义是只要请求路径携带了接口方法对应索引的参数,就会受到热点规则的限流.
-
1s内访问http://localhost:8401/testHotKey?p1=1接口多次,触发限流。
-
如果FlowLimitController的testHotKey方法不指定兜底方法,会返回默认的错误页面。
3. 实战【参数例外项】
-
修改热点规则如下
注:这里的参数类型仅支持int、double、String、long、float、char、byte几种。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?