跳到主要内容

Sentinel API概述

Sentinel是阿里巴巴开源的一款轻量级流量控制框架,主要用于微服务架构中的流量控制、熔断降级和系统保护。Sentinel提供了一系列API,帮助开发者轻松实现这些功能。本文将介绍Sentinel的主要API,并通过代码示例和实际案例帮助你理解其用法。

什么是Sentinel API?

Sentinel API是Sentinel框架提供的一组接口和方法,用于定义资源、设置规则、监控流量以及执行流量控制。通过这些API,开发者可以在应用程序中集成Sentinel,从而实现对系统资源的保护。

主要API介绍

1. SphU.entry

SphU.entry 是Sentinel中最常用的API之一,用于定义资源并进入流量控制逻辑。当资源被调用时,Sentinel会根据预先定义的规则进行流量控制。

java
try (Entry entry = SphU.entry("resourceName")) {
// 被保护的资源逻辑
doSomething();
} catch (BlockException e) {
// 处理被限流或降级的逻辑
handleBlockException(e);
}

在上面的代码中,resourceName 是资源的名称,SphU.entry 会尝试进入该资源的流量控制逻辑。如果资源被限流或降级,则会抛出 BlockException 异常。

2. Tracer.trace

Tracer.trace 用于记录异常或慢调用,帮助开发者监控系统的健康状况。

java
try {
doSomething();
} catch (Exception e) {
Tracer.trace(e); // 记录异常
throw e;
}

3. ContextUtil.enter

ContextUtil.enter 用于手动创建上下文,通常用于跨线程或异步调用的场景。

java
ContextUtil.enter("contextName", "origin");
try {
// 业务逻辑
} finally {
ContextUtil.exit();
}

4. DegradeRuleManager.loadRules

DegradeRuleManager.loadRules 用于动态加载熔断降级规则。

java
List<DegradeRule> rules = new ArrayList<>();
DegradeRule rule = new DegradeRule("resourceName")
.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT)
.setCount(10)
.setTimeWindow(10);
rules.add(rule);
DegradeRuleManager.loadRules(rules);

5. FlowRuleManager.loadRules

FlowRuleManager.loadRules 用于动态加载流量控制规则。

java
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule("resourceName")
.setCount(10)
.setGrade(RuleConstant.FLOW_GRADE_QPS);
rules.add(rule);
FlowRuleManager.loadRules(rules);

实际案例

案例1:限流保护

假设你有一个高并发的API接口 /api/order,你希望对该接口进行限流,确保每秒最多处理100个请求。

java
@GetMapping("/api/order")
public String createOrder() {
try (Entry entry = SphU.entry("createOrder")) {
// 处理订单创建逻辑
return "Order created";
} catch (BlockException e) {
return "Too many requests, please try again later";
}
}

案例2:熔断降级

假设你有一个依赖外部服务的接口 /api/user,当外部服务不可用时,你希望触发熔断降级。

java
@GetMapping("/api/user")
public String getUserInfo() {
try (Entry entry = SphU.entry("getUserInfo")) {
// 调用外部服务
return externalService.getUserInfo();
} catch (BlockException e) {
return "Service unavailable, please try again later";
}
}

总结

Sentinel API提供了强大的流量控制、熔断降级和系统保护功能,帮助开发者构建高可用的微服务系统。通过本文的介绍,你应该已经掌握了Sentinel的主要API及其基本用法。接下来,你可以尝试在自己的项目中集成Sentinel,并根据实际需求配置规则。

附加资源

练习

  1. 在你的Spring Boot项目中集成Sentinel,并对一个API接口进行限流。
  2. 尝试使用 DegradeRuleManager 动态配置熔断降级规则,并测试其效果。