Sentinel——热点规则
热点规则
热点规则是用于实现热点参数限流的规则。热点参数限流指的是,在流控规则中指定对某方法参数的 QPS 限流后,当所有对该资源的请求URL中携带有该指定参数的请求 QPS 达到了阙值,则发生限流。
配置热点规则
controller
package com.zjw.controller;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 前端控制器
*
* @since 2023-12-4
*/
@RestController
@Slf4j
public class DepartController {
/**
* 测试热点规则
*/
//发生异常会降级,调用paramFallback方法
@SentinelResource(value = "param", fallback = "paramFallback")
@GetMapping("/param")
public String param(Long id, String name) {
return "param:" + id + ", " + name;
}
public String paramFallback(Long id, String name) {
return "fallback param:" + id + ", " + name;
}
}
sentinel控制台配置热点规则
请求中含有第0索引(即id),且十秒内请求超过三次,第四次请求会被限流。
参数索引
: 是配置的热点规则所在方法的第几个参数,索引从0开始
统计窗口时长
:统计窗口时间长度(单位为秒)。请求在该时间之内的请求数量
大于阈值
会被限流。
请求测试
也可以通过高级选项设置例外。如我们可以把id为0的值阈值设置大一些,减少被限流的可能。
API配置热点规则
package com.zjw;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRuleManager;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.ArrayList;
import java.util.List;
@SpringBootApplication
public class ConsumerParamRule8080Application {
public static void main(String[] args) {
SpringApplication.run(ConsumerParamRule8080Application.class, args);
//初始化热点规则
paramRule();
}
private static void paramRule() {
ParamFlowRuleManager.loadRules(configParamFlowRule());
}
// 设置授权规则
private static List<ParamFlowRule> configParamFlowRule() {
List<ParamFlowRule> ruleList = new ArrayList<>();
ParamFlowRule rule = new ParamFlowRule();
// 资源名
rule.setResource("param");
// 参数索引
rule.setParamIdx(0);
// 单机阈值
rule.setCount(3);
// 统计窗口时长 s
rule.setDurationInSec(1);
ruleList.add(rule);
return ruleList;
}
}
---------------
我每一次回头,都感觉自己不够努力,所以我不再回头。
---------------