SpringCloudAlibaba:Sentinel热点规则

x33g5p2x  于2021-10-29 转载在 Spring  
字(1.0k)|赞(0)|评价(0)|浏览(600)

一、介绍

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

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

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

二、代码测试

1.新建Controller

@RestController
public class HotkeyController {
    /** * SentinelResource: sentinel相关配置,value唯一,blockHandler回调方法 */
    @GetMapping("/hotkey")
    @SentinelResource(value = "hotkey",blockHandler = "dealHotkey")
    public String hotkey(@RequestParam(value = "key",required = false) String key){
        return "hello hotkey, O(∩_∩)O";
    }
    public String dealHotkey(String key, BlockException e){
        return "调用失败, o(╥﹏╥)o";
    }
}

然后启动项目,访问一下接口出现,sentinel的控制台

2.新建热点规则

解释:资源名为@SentinelResource的value值,阈值是qp的值,统计时长是发生后1秒内降级。

这里的参数索引是对应的是第几个参数,例如http://localhost:8005/hotkey?key=sentinel这里的key就是第0个参数。

这里的单机阈值0的意思是只要一访问,就直接触发降级业务。如果这里单机阈值设置为3,这快速点击四次后后才触发降级业务

3.测试

调用:http://localhost:8005/hotkey

调用http://localhost:8005/hotkey?key=sentinel频繁时:

4.参数例外项

期望当key为phone时qps为100,剩下的为1

狂点后仍然返回正确的行为:

http://localhost:8005/hotkey?key=phone

相关文章