Sentinel热点限流

热点规则

热点参数流控规则,是一种更细粒度的流控规则,可以将规则设置到具体的参数上
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:

  • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
  • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
    热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
    在这里插入图片描述
    1.代码
 @GetMapping("/blockKey")
    @SentinelResource("blockKey")
    public String blockKey(@RequestParam(value = "host1",required = false) String host1,
                           @RequestParam(value = "host2",required = false) String host2,
                           @RequestParam(value = "host3",required = false) String host3){

        return "热点限流";
    }

注意:
热点规则需要注解 @SentinelResource(“资源名”),否则不生效
参数必须是7中基本数据类型才会生效

2.流控规则

注意: 资源名必须是@SentinelResource(value=“资源名”)中 配置的资源名,热点规则依赖于注解
在这里插入图片描述
当请求接口带有第一个变量的参数,每秒内请求达到3次,则达到阈值,流控生效,超过部分请求无法正常请求。
在这里插入图片描述
在这里插入图片描述
3.统一返回
根据以上测试,在热点控制生效时,返回异常的500页面,用户体验太差,为了更好的用户体验,利用@SentinelResource注解 blockHandler参数,这个参数是可以指定当出现异常时的处理方法,具体操作如下:

代码

 @GetMapping("/blockKey")
    @SentinelResource(value = "blockKey",blockHandler = "handle_blockKey")
    public String blockKey(@RequestParam(value = "host1",required = false) String host1,
                           @RequestParam(value = "host2",required = false) String host2,
                           @RequestParam(value = "host3",required = false) String host3){

        return "热点限流";
    }


    public String handle_blockKey(@RequestParam(value = "host1",required = false) String host1,
                                  @RequestParam(value = "host2",required = false) String host2,
                                  @RequestParam(value = "host3",required = false) String host3,
                                  BlockException exception){
        return "系统繁忙,请稍后再试";
    }

注意:
两个方法的返回值相同,参数相同且多一个BlockException,blockHandler值和被调用方法相同,被调用方法用public修饰。

在这里插入图片描述
在这里插入图片描述
4.高级设置

上面的热点规则设定之后,所以使用这个参数都被添加了,高级设置对参数值做了规定,当参数值为设定值时,阈值为高级设置中的阈值。

当参数值为hu时,阈值为20
在这里插入图片描述
虽然频繁点击超过每秒3次,依然没有达到阈值
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值