官网
是什么
热点Key就是配置根据请求参数进行服务降级。比如你的请求为xxx.xxx.xxx.xxx/8080/book?a=1&b=2。我们对你的请求参数进行限流,可以通过热点key配置a的QPS为多少,这样如果超过,就会报异常。注意,我们可以自定义异常,下面会有演示
我们在控制台配置一下
首先演示基本的热点key限流使用
com.alibaba.csp.sentinel.slots.block.BlockException
可以看到有一个新注解@SentinelResource
//热点限流
@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")
public String testHotKey(@RequestParam(value = "p1", required = false) String p1,
@RequestParam(value = "p2", required = false) String p2) {
return "*****testHotKey";
}
// 如果失败用deal_testHotKey这个方法来兜底。
public String deal_testHotKey (String p1, String p2, BlockException exception) {
return "****deal_testHotKey";
}
此时,方法里面的第一个参数只要QPS超过了每秒一次,马上进行降级处理。抛出我们自定义的异常
测试
携带p1参数快速多次访问:
超过1秒一次的限制,触发blockHandler方法。
携带p2参数快速访问多次:
一切正常。
同时携带p1和p2参数快速访问:
接下来使用热点Key配置参数例外项
上述案例演示了第一个参数p1,当QPS超过1秒1次点击后马上被限流
还是上面的URL,现在我的需求变了,只要参数p1的值不是5,我就让他使用上一步配置的热点key处理策略,但是如果p1=5,阈值就变成了200
特殊情况
普通
超过1秒钟一个后,达到阈值1后马上被限流
特殊
我们期望p1参数当它是某个特殊值时,它的限流值和平时不一样
假如当p1的值等于5时,它的阈值可以达到200
配置
测试
当p1等于5的时候,阈值变为200
当p1不等于5的时候,阈值就是平常的1
前提条件
热点参数的注意点,参数必须是基本类型或者String
手贱添加异常看看….
@Sentinelresource
处理的是 Sentinel控制台配置的违规情况,有blockHandler方法配置的兜底处理
Runtimeexception
int age=10/0,这个是java运行时报出的运行时异常 Runtimeexception, @SentinelResource不管
总结
SentinelResource主管配置出错,运行出错该走异常走异常