Sentinel 是阿里巴巴开源的面向分布式服务架构的高可用流量控制组件,主要以流量为切入点,提供多个维度的流量控制、熔断降级、系统自适应保护等功能。
以下是使用 Sentinel 进行流量控制和熔断降级的简单示例:
import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import java.util.ArrayList;
import java.util.List;
public class SentinelExample {
static {
initFlowRules(); // 初始化限流规则
}
public static void main(String[] args) {
while (true) {
Entry entry = null;
try {
entry = SphU.entry("HelloWorld"); // 资源名
// 被保护的代码
System.out.println("Hello, World!");
} catch (BlockException e) {
// 处理被流量控制的情况
System.out.println("Blocked!");
} finally {
if (entry != null) {
entry.exit();
}
}
}
}
private static void initFlowRules() {
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("HelloWorld"); // 限流的资源
rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // 限流规则
rule.setCount(1); // 每秒允许的通过请求数
rules.add(rule);
FlowRuleManager.loadRules(rules); // 加载限流规则
}
}
在这个例子中,我们定义了一个资源 HelloWorld
,并设置了每秒只允许通过 1 个请求。如果请求的通过数量超过了规定的限制,Sentinel 会抛出 BlockException
异常,进行熔断降级处理。这样可以保护系统不被过多的请求压垮。