SpringCloudAlibaba集成Sentinel之热点参数限流的使用

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 SpringCloudAlibaba集成Sentinel之热点参数限流的使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

场景

SpringCloudAlibaba中使用Sentinel实现流量控制以及流控规则详解:

SpringCloudAlibaba中使用Sentinel实现流量控制以及流控规则详解_霸道流氓气质的博客-CSDN博客

在上面实现流量控制的基础上。

学习下热点参数限流的使用。

热点

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

商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制

用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

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

SpringCloudAlibaba集成Sentinel之热点参数限流的使用

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

官方文档地址

https://github.com/alibaba/Sentinel/wiki/%E7%83%AD%E7%82%B9%E5%8F%82%E6%95%B0%E9%99%90%E6%B5%81

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、在上面集成Sentinel的基础上,在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)
    }

这里接口添加两个参数,并且都不是必填项。

注意这里的注解@SentinelResource,第一个参数是配置资源名,第二个参数是配置兜底处理的回调方法,下面是其实现。

即触发限流时的回调方法。

这个注解类似Hystrix的@HystrixCommand注解,可以参考如下

SpringCloud中集成Hystrix实现服务降级(从实例入手):

SpringCloud中集成Hystrix实现服务降级(从实例入手)_霸道流氓气质的博客-CSDN博客

2、打开Sentinel的Dashboard,点击热点规则-新增热点限流规则

SpringCloudAlibaba集成Sentinel之热点参数限流的使用 

热点限流规则说明可以参考其官网

SpringCloudAlibaba集成Sentinel之热点参数限流的使用

 

这里配置的意思就是对第一个参数进行显示(参数索引从0开始),然后一秒内qps大于1则触发限流。

此时将只对第一个参数p1进行限流,当其qps大于1时则触发限流并触发上面代码设置的回调方法。

SpringCloudAlibaba集成Sentinel之热点参数限流的使用

 

3、热点参数例外项,然而如果我们希望当该热点参数为某个特殊值时,它的限流和平时的不一样

可以在高级选项中进行设置,比如下面设置当热点参数值为1时则其阈值不再是上面通用的1而是下面设置的100

注意这里的参数类型只能下拉选择,不能自定义,String与参数类型是一致的。

然后这里的资源名就是与上面的@SentinelResource的value值一致。

SpringCloudAlibaba集成Sentinel之热点参数限流的使用

 

然后别忘了点击添加按钮。

SpringCloudAlibaba集成Sentinel之热点参数限流的使用

 

此时再进行测试,当第一个参数值为1时就不会受上面的1的阈值影响,而是会受下面的100的阈值影响。

SpringCloudAlibaba集成Sentinel之热点参数限流的使用

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135933.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!