1、定义一个流控规则
@Component
public class IotManageSentinelConfig {
/**
* 使用代码编写流控规则,(控制台方式暂不支持)
*/
@PostConstruct
public void initFlowRule() {
List<FlowRule> rules = new ArrayList<>();
//登录短信验证码限流
FlowRule rule = new FlowRule();
rule.setResource(IotManageConstant.SENTINEL_NUM_CHECK_BATCH);
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(1);
rules.add(rule);
/* 4.加载限流规则 */
FlowRuleManager.loadRules(rules);
}
}
使用:
@SentinelResource(entryType = EntryType.IN,value = IotManageConstant.SENTINEL_NUM_CHECK_BATCH,blockHandler = "checkNumListHandler")FlowRule参数解释
resource:资源名,资源名是限流规则的作用对象
count:限流阈值
grade:限流阈值类型,QPS 模式(1)或并发线程数模式(0), 默认QPS 模式,常量:RuleConstant.FLOW_GRADE_QPS
limitApp:流控针对的调用来源, 默认default,代表不区分调用来源
strategy:调用关系限流策略:直接、链路、关联, 默认根据资源本身(直接)
controlBehavior:流控效果(直接拒绝/WarmUp/匀速+排队等待), 默认直接拒绝,常量:RuleConstant.CONTROL_BEHAVIOR_DEFAULT
clusterMode:是否集群限流, 默认否
durationInSec:统计窗口时间长度(单位为秒),1.6.0 版本开始支持,默认1s
maxQueueingTimeMs:最大排队等待时长(仅在匀速排队模式生效),1.6.0 版本开始支持,默认0ms
paramIdx:热点参数的索引,必填,对应SphU.entry(xxx, args)中的参数索引位置
paramFlowItemList:参数例外项,可以针对指定的参数值单独设置限流阈值,不受前面count阈值的限制。仅支持基本类型和字符串类型
clusterConfig:集群流控相关配置