热点参数限流并非在 Sentinel 的 core 模块中实现的,而是在扩展模块中实现的。主要是根据同一资源不同的参数进行限流。
之前的限流策略都是针对资源维度的,热点参数限流则将维度细化到资源的某个参数上。
热点参数限流统计指标及获取指标的方式与FlowSlot等不同,使用ParamMapBucket来统计数据,使用HotParameterLeapArray来实现滑动窗口。
初始化规则
public static void initParamFlowRule(){
List<ParamFlowRule> rules = new ArrayList<>();
ParamFlowRule rule = new ParamFlowRule();
//阈值类型:只支持QPS
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
//阈值
rule.setCount(1);
//资源名
rule.setResource("test");
rule.setParamIdx(0);//指配热点参数的下标
//统计窗口时间长度
rule.setDurationInSec(10);
List<ParamFlowItem> items = new ArrayList<>();
ParamFlowItem item = new ParamFlowItem();
item.setClassType(String.class.getTypeName());
item.setCount(2);
item.setObject("123456");//需要统计的值
ParamFlowItem item1 = new ParamFlowItem();
item1.setClassType(int.class.getName());
it