我们还可以对某一热点数据进行精准限流,比如在某一时刻,不同参数被携带访问的频率是不一样的:
由于携带参数a的请求比较多,我们就可以只对携带参数a的请求进行限流。
这里我们创建一个新的测试请求映射:
- @RequestMapping("/test")
- @SentinelResource("test") //注意这里需要添加@SentinelResource才可以,用户资源名称就使用这里定义的资源名称
- String findUserBorrows2(@RequestParam(value = "a", required = false) int a,
- @RequestParam(value = "b", required = false) int b,
- @RequestParam(value = "c",required = false) int c) {
- return "请求成功!a = "+a+", b = "+b+", c = "+c;
- }
启动之后,我们在Sentinel里面进行热点配置:

然后开始访问我们的测试接口,可以看到在携带参数a时,当访问频率超过设定值,就会直接被限流,这里是直接在后台抛出异常:


而我们使用其他参数或是不带a参数,那么就不会出现这种问题了:

除了直接对某个参数精准限流外,我们还可以对参数携带的指定值单独设定阈值,比如我们现在不仅希望对参数a限流,而且还希望当参数a的值为10时,QPS达到5再进行限流,那么就可以设定例外:

这样,当请求携带参数a,且参数a的值为10时,阈值将按照我们指定的特例进行计算。