【Spring Cloud Alibaba】Sentinel 服务熔断与流量控制
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 com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.context.ContextUtil;
// 配置限流规则
private static void initFlowRules(){
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource(KEY);
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
// 设置限流阈值类型为QPS,每秒允许通过的请求数为1
rule.setCount(1);
rules.add(rule);
FlowRuleManager.loadRules(rules);
}
public static void main(String[] args) {
// 初始化限流规则
initFlowRules();
// 通过SphU.entry("key")进行资源保护,如果被限流,则抛出BlockException异常
while (true) {
try (Entry entry = SphU.entry(KEY)) {
// 业务逻辑
System.out.println("业务逻辑被执行");
} catch (BlockException e) {
// 业务逻辑
System.out.println("被限流了");
}
}
}
这段代码演示了如何使用Sentinel进行限流操作。首先,我们配置了一个限流规则,规定了资源的QPS阈值。接着,在一个无限循环中,我们使用SphU.entry(KEY)
来保护我们的业务代码,如果请求的QPS超过了规则中设定的阈值,则会抛出BlockException
异常,我们可以在catch块中处理这种情况,例如打印一条日志或者进行服务降级。
评论已关闭