何为热点?
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K数据,并对其访问进行限制。比如:
1)商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制;
2)用户 ID 为参数,统计一段时间内频繁访问的用户 ID 进行限制;
1、自定义报错信息 @SentinelResource
替换之前的 Sentinel 系统默认提示:Blocked by Sentinel (flow limiting) ,自定义报错信息;
1.1 如何自定义报错信息??
重要注解 @SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")
注1:@SentinelResource 的名字要唯一,也就是 value唯一;
注2: @SentinelResource(value = "testHotKey") 中未加斜杆的名字 testHotKey 与 @GetMapping("/testHotKey") 中加了斜杆的 /testHotKey 是不一样的;
配置热点规则:
参数索引:热点参数索引,从下标0开始统计;
看以下java代码,参数p1索引为0;如果你要参数p1进行限流,就配0;
1.2 自定义错误信息-java代码
报错了就由 blockHandler 配置的方法处理
@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")
public String testHotKey(@RequestParam(value = "p1", required = false) String pa, @RequestParam(value = "p2", required = false) String p2) {
return "------testHotKey";
}
public String deal_testHotKey(String p1, String p2, BlockException exception) {
//Sentinel 系统默认提示:Blocked by Sentinel (flow limiting)
return "-----deal_testHotKey,呜呜呜呜";
}
1.3 测试自定义规则
根据上图热点规则的配置 :每秒请求一次正常,超过一次则提示配置的自定义报错信息;
http://localhost:8401/testHotKey?p1=a
参数例外项
1)普通情况:每秒请求达到阈值1后马上进行限流;
2)特例:我们期望 p1 参数当它是某个特殊值时,它的限流值和平常不一样;
假如 p1 的值等于444时,它的阈值可以达到200;如图所示:
参数类型:支持8种基本数据类型+java.lang.String
当索引0,也就是参数p1的值为444,每秒可以请求200都不会报错,符合热点配置规则;