Sentinel系列之(六)热点参数限流规则

热点参数限流规则🔥🔥

1. 基本介绍
  • 基本介绍

    ​ 何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:

    • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
    • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

    ​ 热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

    ​ Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。

    注:热点规则仅支持QPS模式。

    注:热点规则必须搭配@SentinelResource使用。

  • 官网:https://github.com/alibaba/Sentinel/wiki/热点参数限流

  • 源码: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几种。

posted @   刘二水  阅读(343)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示