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几种。

浙公网安备 33010602011771号