概述
:::tips
- 直接:统计当前资源的请求,当前资源的请求触发QPS阈值时对当前资源直接限流,是默认模式
- 关联:统计与当前资源关联的另一个资源的请求,另一个资源的请求触发QPS阈值时对当前资源进行限流
- 链路:统计从指定资源访问到当前资源的请求,指定资源访问到当前资源的请求触发QPS阈值时对指定资源进行限流
:::
直接模式
:::tips 直接模式:统计当前资源的请求,当前资源的请求触发QPS阈值时对当前资源直接限流,是默认模式
点击资源后面的流控按钮,就可以填写限流规则
其含义是限制/order/{id}
资源的单机QPS(每秒并发)阈值为2,即每秒只允许2次请求,超出的请求会被拦截并报错
:::
关联模式
:::tips 关联模式:统计与当前资源关联的另一个资源的请求,另一个资源的请求触发QPS阈值时对当前资源进行限流
点击资源后面的流控按钮,然后点击高级选项,选择关联模式,就可以填写限流规则
其含义是当/write
资源的访问量触发单机QPS(每秒并发)阈值时,就会对/read
资源进行限流,避免影响/write
资源
:::
链路模式
介绍
:::tips 链路模式:统计从指定资源访问到当前资源的请求,指定资源访问到当前资源的请求触发QPS阈值时对指定资源进行限流
例如有两条请求链路:/test1
、/test2
,两个资源都需要访问/common
资源,如果只希望限制从/test2
进入到/common
的请求,则可以这样配置
其含义是当/test2
访问/common
的访问量触发单机QPS(每秒并发)阈值时,会对/test2
的请求进行限流
:::
添加资源标记
:::tips 默认情况下,Service实现类中的方法是不被Sentinel监控的,需要通过@SentinelResource注解来标记要监控的方法,并指定注解的value属性作为自定义的资源名称 :::
@SentinelResource(value = 资源名称)
public void query(){
System.err.println("查询商品");
}
关闭资源聚合
:::tips 链路模式中,是对不同来源的两个链路做监控。但是Sentinel默认会给进入SpringMVC的所有请求设置为同一个资源,会导致链路模式失效,所以需要关闭Sentinel对SpringMVC的资源聚合,在微服务的配置文件中添加配置 :::
spring:
cloud:
sentinel:
#关闭Sentinel对SpringMVC的资源聚合
web-context-unify: false
使用
:::tips
配置完前面的内容之后,就重启这个微服务,然后进入浏览器访问需要调用Service实现类的API,然后在Sentinel中就可以看到出现了两个资源,两个资源下面都可以看到标记资源,点击标记资源需要后面的流控按钮,然后点击链路模式,填写一个入口资源,如果从这个入口资源访问标记资源的请求超出QPS阈值,就会被限流
:::