1.流控模式
在添加限流规则时,点击高级选项,可以选择三种流控模式:
- 直接:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式
- 关联:统计与当前资源相关的另一个资源,当关联的资源触发阈值时,对当前资源限流
- 链路:统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流
2.关联模式
2.1关联模式:统计与当前资源相关的另一个资源,触发阅值时,对当前资源限流使用场景:
比如用户支付时需要修改订单状态,同时用户要查询订单。查询和修改操作会争抢数据库锁,产生竞争。业务需求是有限支付和更新订单的业务,因此当修改订单业务触发阅值时,需要对查询订单业务限流。
2.2配置规则
语法说明:当/write资源访问量触发阈值时,就会对/read资源限流,避免影响/write资源。
2.3案例需求说明:
在OrderController新建两个端点:/order/queryOrder和/order/updateOrder,无需实现业务配置流控规则,
当/order/updateOrder资源被访问的QPS超过5时,对/order/queryOrder请求限流
(1)定义/order/queryOrder、/order/updateOrder端点端点,模拟订单查询和更新订单
@GetMapping("/updateOrder")
public String updateOrder(){
return "修改订单成功!";
}
@GetMapping("/queryOrder")
public String queryOrder(){
return "查看订单详情";
}
重启服务、访问这俩个接口、触发sentinel监控
(2)配置流控规则对哪个端点限流,就点击哪个端点后面的按钮。我们是对订单查询/order/queryOrder限流,因此点击它后面的按钮:
(3)测试
可以看到1000个用户,100秒,因此QPS为10,超过了我们设定的阈值:5
请求的目标是/order/updateOrder,这样这个断点就会触发阈值。
但限流的目标是/order/queryOrder,我们在浏览器访问,可以发现: