何为热点?
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:
- 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
- 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
简单来说就是:对一个频繁访问的点,比如一个请求,要传入p1,p2两个参数,现在对p1进行限制,限制其一秒只能传入5此,超过这个次数就降级
怎么做?
- 配置controller
在传统的的getMapping下加一个@SentinelResource注解,指定降级方法,这里要注意,降级方法中一定要加一个BlockException
@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey",blockHandler = "del_testHotKey")
public String testHotKey(@RequestParam(value = "p1",required = false)String p1,@RequestParam(value = "p2",required = false)String p2){
return "----testHotKey";
}
public String del_testHotKey(String p1, String p2, BlockException exception){
return "...it is a pity,blocked";
}
- 在sentinel dashboard中进行配置
如下图,参数所以即上面的p1,(从0开始计数),单一秒内超过1此,就进行降级处理
结果:
参数列外项
有些时候,对一个请求,除了限制热点外,想对某些特定的值不进行限流:
即对于上述的p1,若p1=5,就不进行限流