官网

官网

是什么

热点Key就是配置根据请求参数进行服务降级。比如你的请求为xxx.xxx.xxx.xxx/8080/book?a=1&b=2。我们对你的请求参数进行限流,可以通过热点key配置a的QPS为多少,这样如果超过,就会报异常。注意,我们可以自定义异常,下面会有演示

我们在控制台配置一下

1610803443590.png

1610803443620.png

首先演示基本的热点key限流使用

com.alibaba.csp.sentinel.slots.block.BlockException

可以看到有一个新注解@SentinelResource

  1. //热点限流
  2. @GetMapping("/testHotKey")
  3. @SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")
  4. public String testHotKey(@RequestParam(value = "p1", required = false) String p1,
  5. @RequestParam(value = "p2", required = false) String p2) {
  6. return "*****testHotKey";
  7. }
  8. // 如果失败用deal_testHotKey这个方法来兜底。
  9. public String deal_testHotKey (String p1, String p2, BlockException exception) {
  10. return "****deal_testHotKey";
  11. }

此时,方法里面的第一个参数只要QPS超过了每秒一次,马上进行降级处理。抛出我们自定义的异常

测试

携带p1参数快速多次访问:

1610803443660.png

超过1秒一次的限制,触发blockHandler方法。

携带p2参数快速访问多次:

1610803443690.png

一切正常。

同时携带p1和p2参数快速访问:

1610803443740.png

接下来使用热点Key配置参数例外项

上述案例演示了第一个参数p1,当QPS超过1秒1次点击后马上被限流

还是上面的URL,现在我的需求变了,只要参数p1的值不是5,我就让他使用上一步配置的热点key处理策略,但是如果p1=5,阈值就变成了200

特殊情况

普通

超过1秒钟一个后,达到阈值1后马上被限流

特殊

我们期望p1参数当它是某个特殊值时,它的限流值和平时不一样

假如当p1的值等于5时,它的阈值可以达到200

配置

1610803443795.png

测试

http://localhost:8401/testHotKey?p1=5

http://localhost:8401/testHotKey?p1=3

当p1等于5的时候,阈值变为200

当p1不等于5的时候,阈值就是平常的1

前提条件

热点参数的注意点,参数必须是基本类型或者String

手贱添加异常看看….

@Sentinelresource
处理的是 Sentinel控制台配置的违规情况,有blockHandler方法配置的兜底处理

Runtimeexception
int age=10/0,这个是java运行时报出的运行时异常 Runtimeexception, @SentinelResource不管

总结
SentinelResource主管配置出错,运行出错该走异常走异常