SpringCloud(40)——Sentinel热点Key

什么是热点?我们看一下官网的解释

image.png

我个人理解,之前的流控和降级是针对接口级别来进行限流的,而热点可以做到更细粒度的限流,从参数的角度来进行限流。

回滚方法
之前的case,当触发限流后,都是用sentinel系统默认的提示:Blocked by Sentinel(flow limiting)
我们能不能像使用hystrix那样,某个方法出问题了,可以找到对应的自定义的降级方法呢?
当然是可以以的,只不过在hystrix中我们使用的是@HystrixCommand而在Sentinel中,我们要使用@SentinelResource

新增controller测试方法

    @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)
    {
        return "------testHotKey";
    }

    public String deal_testHotKey (String p1, String p2, BlockException exception)
    {
        return "------deal_testHotKey,o(╥﹏╥)o";  //sentinel系统默认的提示:Blocked by Sentinel (flow limiting)
    }

需要注意的是testHotKey是我们的测试方法,方法里有两个非必填的参数,方法上面使用了@SentinelResource注解,意思是开启了Sentinel资源配置的一些功能,value就是资源名,而blockHandler就相当于hystrix的回滚方法了。

接下来我们配置热点规则

image.png

注意:资源名不是controller的方法名,而是配置的@SentinelResource的value名

image.png

参数索引表示的是第几个参数,比如我们要对p1进行限流就要填0,对p2限流就填1。
热点限流都是根据QPS来判定的,因此我们设置的这条热点规则的意思是:
当配置testHostKey这个资源的请求中含有第一个参数(也就是p1)的请求的QPS大于1时,触发限流。

接下来我们进行测试
测试结果:
QPS大于1时(也就是一直发送请求)
当请求参数是p1时,会发生限流
当请求参数是p1和p2时,也会发生限流
当请求参数是p2时,不会发生限流

而且打印的是我们自定义的方法中的回滚信息。

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容