流控组件之Sentinel-使用记录

https://cloud.tencent.com/developer/article/1452017

作用: 限流、熔断、降级、集群流控、网关流控、实时监控、动态规则

规则类型

FlowRuleManager.loadRules(List<FlowRule> rules); // 流控规则
DegradeRuleManager.loadRules(List<DegradeRule> rules); // 降级规则
SystemRuleManager.loadRules(List<SystemRule> rules); // 系统规则
AuthorityRuleManager.loadRules(List<AuthorityRule> rules); // 授权规则

1. 使用方法

a. 引入sentinel-core和sentinel-annotation-aspectj

b. 加入切面类

<bean id="sentinelResourceAspect" class="com.qxwz.sentinel.annotation.aspectj.SentinelResourceAspect"/>

c. 通过启动时候配置规则

// 限流
List<FlowRule> rules = new ArrayList<>(); FlowRule rule = new FlowRule(); rule.setResource("name"); rule.setGrade(RuleConstant.FLOW_GRADE_QPS); rule.setCount(0); rules.add(rule); FlowRuleManager.loadRules(rules);
------------------------------------------------------------------------------------------------------------
//熔断 1. 平均响应时间 (DEGRADE_GRADE_RT) 2. 异常比例 (DEGRADE_GRADE_EXCEPTION_RATIO) 3. 异常数 (DEGRADE_GRADE_EXCEPTION_COUNT)
List<DegradeRule> rules = new ArrayList<>();
DegradeRule rule = new DegradeRule();
rule.setResource(KEY);
rule.setCount(10);
rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
rule.setTimeWindow(10);
rules.add(rule);
DegradeRuleManager.loadRules(rules);
------------------------------------------------------------------------------------------------------------
// 系统保护规则 1. Load(仅对 Linux/Unix-like 机器生效) 2. RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒
// 3. 线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护 4. 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护
List<SystemRule> rules = new ArrayList<>();
SystemRule rule = new SystemRule();
rule.setHighestSystemLoad(10);
rules.add(rule);
SystemRuleManager.loadRules(rules);
------------------------------------------------------------------------------------------------------------
// 访问规则控制
AuthorityRule rule = new AuthorityRule();
rule.setResource("test");
rule.setStrategy(RuleConstant.AUTHORITY_WHITE);
rule.setLimitApp("appA,appB");
AuthorityRuleManager.loadRules(Collections.singletonList(rule));
------------------------------------------------------------------------------------------------------------
//热点规则
sentinel-parameter-flow-control
ParamFlowRule rule = new ParamFlowRule(resourceName)
.setParamIdx(0)
.setCount(5);
// 针对 int 类型的参数 PARAM_B,单独设置限流 QPS 阈值为 10,而不是全局的阈值 5.
ParamFlowItem item = new ParamFlowItem().setObject(String.valueOf(PARAM_B))
.setClassType(int.class.getName())
.setCount(10);
rule.setParamFlowItemList(Collections.singletonList(item));
ParamFlowRuleManager.loadRules(Collections.singletonList(rule));

d. 在需要流控的方法上加注解定义异常类及异常处理方法@SentinelResource(value = "name", blockHandler = "handleException", blockHandlerClass = { ExceptionUtil.class })

猜你喜欢

转载自www.cnblogs.com/it-worker365/p/12349681.html