如何在项目中添加Sentinel的支持请看这里
Sentinel笔记(一)第一个监控实例
介绍
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:
商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。
新增热点规则
创建controller方法
这里用到 @SentinelResource 注解,将该资源标记为Sentinel资源
- value属性标识资源名称,在sentinel控制台可以看到,配置热点规则使用这个资源名称,而不是 @GetMapping 中的路由
- blockHandler 为兜底方法的名称,表示如果对该接口的请求违反了在控制台配置的规则,那么执行 blockHandler 所指定的方法,并且只会处理违反控制台配置的规则的请求,程序内部产生的异常不会走 blockHandler 指定的方法
如果资源没有使用 @SentinelResource 注解标记,那么控制台的规则不会生效
@GetMapping("/test/e")
@SentinelResource(value = "testE",blockHandler = "test_e")
public String testE(@RequestParam(value ="p1", required = false) String p1,
@RequestParam(value = "p2",required = false) String p2){
return "=======test E======";
}
public String test_e(String p1, String p2, BlockException e){
return "=======test_e======";
}
创建好就扣后访问一下,Sentinel控制台就可以看到该资源了
在热点规则菜单内新建热点规则
新建以下规则
资源名:@SentinelResource 注解中 value 的值
参数索引:表示设置第几个参数为热点,从0开始
阈值和窗口时长都和之前的配置限流时的含义一样,限流为1秒1次
参数例外项
当我们想对某个参数限流,但是又想让其对某些值特殊处理时可以打开高级选项来进行设置
下面的例子就是:
- 对testE资源,0号位置的参数进行1秒1次的限流
- 但是当该参数传入的值为 yygq 时,限流次数改为1秒10次
因为p1我设置为了可选参数,所以我这个例子的完整含义就是
当对 testE 资源进行调用时
- 如果传了p1参数,并且值是 yygq,那么QPS限制为10,否则为1
- 如果没有传p1参数,那么不限流
不要忘了点击添加,下面这样才是添加上了
支持的数据类型
参数例外项只支持以下6种基本的数据类型和String类型