Sentinel 基本使用 - 资源与规则
一、资源定义
-
什么是资源:
- 资源是被 Sentinel 保护的对象,通常是一个接口、方法或代码块。
- 在 Spring Cloud Gateway 中,资源通常是路由路径(如
/api/user/**
)。
-
如何定义资源:
- 自动识别:Sentinel 会自动识别 Spring MVC 的
@RequestMapping
注解标记的方法。 - 手动定义:可以通过
SphU.entry("resourceName")
手动定义资源(适用于非 Web 场景)。 - Gateway 资源:在 Spring Cloud Gateway 中,资源通常是路由的 ID(如
service1_route
)。
- 自动识别:Sentinel 会自动识别 Spring MVC 的
二、规则类型
Sentinel 支持以下几种规则:
-
流量控制规则(FlowRule):
- 作用:控制资源的访问流量(如 QPS、线程数)。
- 关键参数:
resource
:资源名称grade
:控制维度(QPS
或THREAD
)count
:阈值limitApp
:来源应用(default
表示所有来源)
-
熔断降级规则(DegradeRule):
- 作用:当资源出现异常或响应慢时自动降级。
- 关键参数:
resource
:资源名称grade
:降级策略(ERROR_RATIO
、ERROR_COUNT
、SLOW_RATIO
)count
:阈值timeWindow
:熔断时长(毫秒)
-
系统保护规则(SystemRule):
- 作用:保护整个系统的稳定性(如 CPU 使用率、负载)。
- 关键参数:
highestSystemLoad
:最高系统负载avgRt
:平均响应时间maxThread
:最大线程数
三、基本使用示例
1. 流量控制规则(FlowRule)
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 FlowRuleConfig {
public static void initFlowRules() {
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("service1_route"); // 资源名称
rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // 控制维度(QPS)
rule.setCount(10); // QPS 阈值
rules.add(rule);
FlowRuleManager.loadRules(rules); // 加载规则
}
}
2. 熔断降级规则(DegradeRule)
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
import java.util.ArrayList;
import java.util.List;
public class DegradeRuleConfig {
public static void initDegradeRules() {
List<DegradeRule> rules = new ArrayList<>();
DegradeRule rule = new DegradeRule();
rule.setResource("service1_route"); // 资源名称
rule.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO); // 降级策略(异常比例)
rule.setCount(0.5); // 异常比例阈值(50%)
rule.setTimeWindow(10000); // 熔断时长(10秒)
rules.add(rule);
DegradeRuleManager.loadRules(rules); // 加载规则
}
}
3. 在 Spring Cloud Gateway 中使用
import com.alibaba.csp.sentinel.adapter.gateway.sc.SentinelGatewayFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SentinelGatewayConfig {
@Bean
public SentinelGatewayFilter sentinelGatewayFilter() {
return new SentinelGatewayFilter();
}
}
四、规则管理
- 动态配置:
- 可以通过 Sentinel Dashboard 或配置中心(如 Nacos)动态调整规则。
- 规则加载:
- Sentinel 会定期从配置中心加载最新的规则。
五、总结
- 资源:被 Sentinel 保护的对象(如接口、路由路径)。
- 规则:控制流量、熔断降级、系统保护的策略。
- 使用方式:
- 手动定义资源(
SphU.entry
) - 自动识别资源(Spring MVC、Gateway)
- 动态配置规则(Dashboard 或配置中心)
- 手动定义资源(
Sentinel 的核心是通过 资源 + 规则 的组合实现对系统的保护。