什么是热点?我们看一下官网的解释
我个人理解,之前的流控和降级是针对接口级别来进行限流的,而热点可以做到更细粒度的限流,从参数的角度来进行限流。
回滚方法
之前的case,当触发限流后,都是用sentinel系统默认的提示:Blocked by Sentinel(flow limiting)
我们能不能像使用hystrix那样,某个方法出问题了,可以找到对应的自定义的降级方法呢?
当然是可以以的,只不过在hystrix中我们使用的是@HystrixCommand而在Sentinel中,我们要使用@SentinelResource
新增controller测试方法
@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";
}
public String deal_testHotKey (String p1, String p2, BlockException exception)
{
return "------deal_testHotKey,o(╥﹏╥)o"; //sentinel系统默认的提示:Blocked by Sentinel (flow limiting)
}
需要注意的是testHotKey是我们的测试方法,方法里有两个非必填的参数,方法上面使用了@SentinelResource注解,意思是开启了Sentinel资源配置的一些功能,value就是资源名,而blockHandler就相当于hystrix的回滚方法了。
接下来我们配置热点规则
注意:资源名不是controller的方法名,而是配置的@SentinelResource的value名
参数索引表示的是第几个参数,比如我们要对p1进行限流就要填0,对p2限流就填1。
热点限流都是根据QPS来判定的,因此我们设置的这条热点规则的意思是:
当配置testHostKey这个资源的请求中含有第一个参数(也就是p1)的请求的QPS大于1时,触发限流。
接下来我们进行测试
测试结果:
QPS大于1时(也就是一直发送请求)
当请求参数是p1时,会发生限流
当请求参数是p1和p2时,也会发生限流
当请求参数是p2时,不会发生限流
而且打印的是我们自定义的方法中的回滚信息。