Sentinel限流中间件
Sentinel 是阿里巴巴开源的一款面向分布式服务架构的轻量级高可用流量控制组件。主要以流量为切入点,提供多维度的流量控制、熔断降级、系统负载保护等功能。
以下是一个使用 Sentinel 进行限流的 Java 示例代码:
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 SentinelDemo {
static {
initFlowRules(); // 初始化限流规则
}
private static void initFlowRules() {
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("test");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
// 设置限流规则为每秒不超过2个请求
rule.setCount(2);
rules.add(rule);
FlowRuleManager.loadRules(rules);
}
public static void main(String[] args) {
while (true) {
Entry entry = null;
try {
// 创建一个名为"test"的资源的入口
entry = SphU.entry("test");
// 被保护的代码
System.out.println("Hello Sentinel");
} catch (BlockException e) {
// 处理被流量控制的情况
System.out.println("Flow limiting");
} finally {
// 正常情况下,entry会自动exit,但是在异常情况下,需要手动exit
if (entry != null) {
entry.exit();
}
}
}
}
}
在这个示例中,我们配置了一个限流规则,资源名为 "test",规则是每秒不超过2个请求。在主函数中,我们持续创建入口 "test",并在其中执行打印操作。如果请求超过限制,会抛出 BlockException
并执行异常处理逻辑。这个简单的例子展示了如何使用 Sentinel 进行基本的限流操作。
评论已关闭