SpringCloud Alibaba学习(八):Sentinel的热点规则

简介: 热点即经常访问的数据,很多时候我们希望统计或者限制某个热点数据中访问频次最高的TopN数据,并对其访问进行限流或者其它操作 。

如果不知道如何配置sentinel或者不知道如何打开文章中的一些网页,可以参考我前面的文章:     SpringCloud Alibaba学习(五):Sentinel的介绍与搭建

一、热点是什么



热点即经常访问的数据,很多时候我们希望统计或者限制某个热点数据中访问频次最高的TopN数据,并对其访问进行限流或者其它操作 。


官网:        

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


二、配置方法



1、sentinel dashboard中

e13af92502f14930b9c02322eda57dae.png


2、8401的controller中:

               

@SentinelResource注解在下一篇文章中会讲到,这里可以把它理解为@HystrixCommand,参考文章:SpringCloud学习(十四):Hystrix的服务熔断实现


@GetMapping("/testHotKey")
    @SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")     //blockHandler指定兜底方法
                                                                                // value可以写任意值,一般和rest路径保持一致
    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";
    }


三、测试


       

浏览器访问testHotKey,只要带上参数p1,在一秒内访问两次以上,就会限流。

839bc724365b460b95cc99a2009d0527.png


而将代码中的blockHandler去掉后,在一秒内访问两次以上,会直接报错 。这样将异常显示到了用户界面,不够友好。


四、结论


e788577afefa4bf2981fb1d754738acb.png


限流模式只支持QPS模式,也只有QPS模式下才叫热点。


配置的参数索引是@SentinelResource注解的方法参数索引,0代表第一个参数,1代表第二个参数,以此类推;


单机阀值以及统计窗口时长表示在此窗口时间超过阀值就限流。


上例中,我们将参数索引指定为0,所以当访问路径带上第一个参数p1时,在一秒(统计窗口时长)内访问超过一次(单机阈值)就可能发生限流。


限流时会调用我们配置的blockHandler中的方法,给用户返回一个较为友好的提示,而不是报错的界面。


五、参数例外项



1、是什么

     

在上例中,如果我们访问带上参数p1,则一秒访问超过一次会被限流。那么,假如我们期望当p1参数是某个特殊值时,它的限流值和平时不一样,这时该如何配置呢?


2、配置方法

     

当p1参数为5时,限流阈值为200。

81408ac5dc744e93a0d3872e08188222.png


3、测试

     

如果访问时p1的值不为5,那么一秒内超过一次就会限流;而如果p1=5,则狂点鼠标也不会限流(达不到每秒200次访问,不知道有没有大佬的手能达到)。


六、注意



@SentinelResource    处理的是Sentinel控制台配置的违规情况,有blockHandler方法配置的兜底处理;而像RuntimeException这样的异常(比如int age = 10/0)是java运行时报出的运行时异常,@SentinelResource并不处理。


那么如果报出了这样的异常该怎么处理能够让用户体验更为友好呢?这就是我们后面要说到的内容。


目录
打赏
0
1
0
0
178
分享
相关文章
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
9月前
|
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(2)
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(2)
87 3
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全(1)
618 1
|
9月前
|
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(1)
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(1)
293 1
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
125 0
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(下)
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(下)
403 0
|
9月前
|
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(上)
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(上)
343 0
|
9月前
|
SpringCloud Demo入门学习
SpringCloud Demo入门学习
93 0
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
129 1