SpringCloudAlibaba:Sentinel热点规则
一、介绍
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 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