• 如何使用Sentinel实现流控和降级


    Sentinel 是一款面向分布式系统的流量控制、熔断和自适应限流工具,由Alibaba开源。Sentinel 以Java客户端的形式提供,可以嵌入到Java应用中以保护系统稳定运行。

    以下是使用Sentinel实现流量控制和降级操作的详细步骤:

    1. 添加Sentinel依赖

    首先,需要在项目中添加Sentinel的依赖。

    Maven依赖:

    <dependency>
        <groupId>com.alibaba.cspgroupId>
        <artifactId>sentinel-coreartifactId>
        <version>1.8.0version>
    dependency>
    

    Gradle依赖:

    implementation 'com.alibaba.csp:sentinel-core:1.8.0'
    

    2. 引入Sentinel核心库

    在应用启动类或者配置文件中引入Sentinel核心库。

    import com.alibaba.csp.sentinel.init.InitFunc;
    
    public class SentinelApplication {
        public static void main(String[] args) {
            // 初始化Sentinel
            InitFunc.doInit();
            // 其他应用启动代码...
        }
    }
    

    3. 定义资源

    Sentinel 中的资源是受保护的实体,如一个接口调用、一个数据库连接等。

    import com.alibaba.csp.sentinel.Entry;
    import com.alibaba.csp.sentinel.SphU;
    import com.alibaba.csp.sentinel.context.ContextUtil;
    import com.alibaba.csp.sentinel.slots.block.BlockException;
    
    public class YourService {
        private static final String RESOURCE_NAME = "yourMethodResource";
    
        public void yourMethod() {
            Entry entry = null;
            try {
                entry = SphU.entry(RESOURCE_NAME);
                // 业务逻辑...
            } catch (BlockException e) {
                // 流量控制或熔断时的处理逻辑...
            } finally {
                if (entry != null) {
                    entry.exit();
                }
            }
        }
    }
    

    4. 配置流控规则

    Sentinel 允许你通过代码或配置文件定义流控规则。

    代码配置:

    import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
    import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
    
    FlowRule rule = new FlowRule();
    rule.setResource(RESOURCE_NAME);
    rule.setCount(10); // 每秒通过的请求数量
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // 限流阈值类型
    rule.setLimitApp("default"); // 来源应用名称
    
    List<FlowRule> rules = new ArrayList<>();
    rules.add(rule);
    
    FlowRuleManager.loadRules(rules);
    

    配置文件:

    在sentinel目录下的flow-rules.json文件中定义规则。

    [
        {
            "resource": "yourMethodResource",
            "limitApp": "default",
            "grade": 1,
            "count": 10,
            "strategy": 0,
            "controlBehavior": 0,
            "exceResources": "",
            "clusterMode": false
        }
    ]
    

    5. 配置降级规则

    降级规则允许你在系统负载较高时,对某些服务调用进行降级。

    import com.alibaba.csp.sentinel.slots.system.SystemRule;
    import com.alibaba.csp.sentinel.slots.system.SystemRuleManager;
    
    SystemRule rule = new SystemRule();
    rule.setHighestSystemLoad(75); // 系统负载达到75%时触发降级
    SystemRuleManager.loadRules(Collections.singletonList(rule));
    

    6. 定义降级逻辑

    在业务逻辑中,捕获BlockException来定义降级逻辑。

    try {
        entry = SphU.entry(RESOURCE_NAME);
        // 正常业务逻辑...
    } catch (BlockException e) {
        // 执行降级逻辑,例如返回默认值、执行备选逻辑等
        System.out.println("Blocked by Sentinel: " + e.getMessage());
        // 返回降级后的结果
    }
    

    7. 启动应用并测试

    启动你的应用,并模拟高流量或高系统负载,以测试Sentinel的流控和降级功能是否按预期工作。

    示例解释

    • 添加Sentinel依赖:将Sentinel核心库添加到项目依赖中。
    • 引入Sentinel核心库:在应用启动时初始化Sentinel。
    • 定义资源:在代码中定义需要Sentinel保护的资源。
    • 配置流控规则:通过代码或配置文件定义流控规则,控制资源的访问流量。
    • 配置降级规则:定义系统负载达到一定阈值时的降级规则。
    • 定义降级逻辑:在业务逻辑中处理BlockException,实现流量控制或系统保护的降级逻辑。
    • 启动应用并测试:启动应用并通过测试验证Sentinel规则是否生效。

    通过以上步骤,你可以使用Sentinel实现应用的流量控制和降级操作,以保护系统在高流量或不稳定情况下的稳定性。欢迎关注威哥爱编程,一起学习成长。

  • 相关阅读:
    FEDformer里面的CZ1d
    CoreDNS篇9-kubernetes插件
    不同色系的窗帘带来的含义也不一样 | 好佳居窗帘十大品牌
    点云缩放(附open3d python代码)
    Linux Crontab 定时任务
    【文档】开发者常用术语
    【PMTU】TCP的MTU探测
    计算机毕业设计ssm大学生兼职系统k4ys5系统+程序+源码+lw+远程部署
    古琴【A6】湘妃怨
    【javaWeb】在webapp中手动发布一个应用
  • 原文地址:https://blog.csdn.net/finally_vince/article/details/138566550