Sentinel使⽤(2)规则配置
1. 流量控制规则 (FlowRule)
重要属性:
Field说明默认值
resource资源名,资源名是限流规则的作⽤对象
count限流阈值
grade限流阈值类型,QPS 或线程数模式QPS 模式
limitApp流控针对的调⽤来源default,代表不区分调⽤来源strategy判断的根据是资源⾃⾝,还是根据其它关联资源 (refResource),还是根据链路⼊⼝根据资源本⾝controlBehavior流控效果(直接拒绝 / 排队等待 / 慢启动模式)直接拒绝
同⼀个资源可以同时有多个限流规则。
⽰例:
private static void initFlowQpsRule() {
List<FlowRule> rules = new ArrayList<>();
FlowRule rule1 = new FlowRule();
rule1.setResource(KEY);
// set limit qps to 20
rule1.setCount(20);
rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule1.setLimitApp("default");
rules.add(rule1);
FlowRuleManager.loadRules(rules);
}
2. 熔断降级规则 (DegradeRule)
熔断降级规则包含下⾯⼏个重要的属性:
Field说明默认值resource资源名,即限流规则的作⽤对象
count阈值
grade降级模式,根据 RT 降级还是根据异常⽐例降级RT timeWindow降级的时间
同⼀个资源可以同时有多个降级规则。
例如:
private static void initDegradeRule() {
List<DegradeRule> rules = new ArrayList<>();
DegradeRule rule = new DegradeRule();
rule.setResource(KEY);
/
/ set threshold RT, 10 ms
rule.setCount(10);
rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
rule.setTimeWindow(10);
rules.add(rule);
DegradeRuleManager.loadRules(rules);
}
降级策略:
平均响应时间 (DEGRADE_GRADE_RT):当资源的平均响应时间超过阈值(DegradeRule 中的 count,以 ms 为单位)之后,资源进⼊准降级状态。接下来如果持续进⼊ 5 个请求,它们的 RT 都持续超过这个阈值,那么在接下的时间窗⼝(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个⽅法的调⽤都会⾃动地返回(抛出 DegradeException)。
异常⽐例 (DEGRADE_GRADE_EXCEPTION_RATIO):当资源的每秒异常总数占通过量的⽐值超过阈值(DegradeRule 中
的 count)之后,资源进⼊降级状态,即在接下的时间窗⼝(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个⽅法的调⽤都会⾃动地返回。异常⽐率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数⽬超过阈值之后会进⾏熔断。
注意:异常降级仅针对业务异常,对 Sentinel 限流降级本⾝的异常(BlockException)不⽣效。为了统计异常⽐例或异常数,需要通
过 ace(ex) 记录业务异常。
例如:
Entry entry = null;
try {
entry = (key, EntryType.IN, key);
// Write your biz code here.
// <<BIZ CODE>>
} catch (Throwable t) {
if (!BlockException.isBlockException(t)) {
}
} finally {
if (entry != null) {
}
degrade
}