Sentinel入门

1.侵入式的方式

侵入式的代码如下,用SphU.entry定义要限制的业务逻辑

csharp 复制代码
package com.hamster.sentineldemo;

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 Test {

    public static void main(String[] args) throws Exception {
        initFlowRules();
        while (true) {
            Entry entry = null;
            try {
                entry = SphU.entry("HelloWorld");
                /*您的业务逻辑 - 开始*/
                System.out.println("hello world");
                /*您的业务逻辑 - 结束*/
            } catch (BlockException e1) {
                /*流控逻辑处理 - 开始*/
                System.out.println("block!");
                /*流控逻辑处理 - 结束*/
                break;
            } finally {
                if (entry != null) {
                    entry.exit();
                }
            }
        }
    }

    private static void initFlowRules(){
        List<FlowRule> rules = new ArrayList<>();
        FlowRule rule = new FlowRule();
        rule.setResource("HelloWorld");
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        // Set limit QPS to 20.
        rule.setCount(20);
        rules.add(rule);
        FlowRuleManager.loadRules(rules);
    }
}

2.注解方式

首先用@SentinelResource定义要限流的方法:

csharp 复制代码
package com.hamster.sentineldemo;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping("/test")
    @SentinelResource(
            value = "test",
            blockHandler = "testBlockHandler",
            fallback = "testFallback"
    )
    public String test(){
        return "test";
    }
    public String testBlockHandler(BlockException ex){
        return "testBlockHandler";
    }
}

blockHandler 是被限流后的操作

fallback 是出错误时的操作,即熔断

然后定义规则:

csharp 复制代码
package com.hamster.sentineldemo;

import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect;
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 jakarta.annotation.PostConstruct;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Collections;

@Configuration
public class SentinelConfig {
    @PostConstruct
    public void initRules(){
        FlowRule rule = new FlowRule("test")
                .setCount(1)
                .setGrade(RuleConstant.FLOW_GRADE_QPS)
                .setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);
        FlowRuleManager.loadRules(Collections.singletonList(rule));
        System.out.println("Rules loaded successfully.");
    }
    @Bean
    public SentinelResourceAspect sentinelResourceAspect() {
        return new SentinelResourceAspect();
    }
}

注解不生效的可能情况:

1.两个方法都要用public不要用private,第一个方法不加会导致sentinel找不到getResult这个资源名,同样的第二个不加会导致sentinel找不到这个方法然后报错。

2.两个方法返回类型必须一样。

3.两个方法的参数类型必须一样,数量和参数类型要保持一致,注意第一个方法加了@PathVariable这个注解,这个只是url传参用的不需要加。

4.blockHandler的值必须与你的兜底方法,也就是第二个方法保持一致。

5.blockHandler对应方法必须要加BlockException这个异常类参数。

参考:

入门教程 https://developer.aliyun.com/article/783342

不生效情况 https://www.cnblogs.com/ningyyrx/p/16018484.html

相关推荐
luyun0202021 分钟前
牛批了,某音录播神器
java·windows·figma
a***560626 分钟前
Windows上安装Go并配置环境变量(图文步骤)
开发语言·windows·golang
IFTICing1 小时前
【环境配置】ffmpeg下载、安装、配置(Windows环境)
windows·ffmpeg
无限进步_4 小时前
C语言数组元素删除算法详解:从基础实现到性能优化
c语言·开发语言·windows·git·算法·github·visual studio
自由的好好干活5 小时前
使用Qoder编写ztdaq的C#跨平台示例总结
linux·windows·c#·qoder
x***44018 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
CryptoPP10 小时前
使用 KLineChart 这个轻量级的前端图表库
服务器·开发语言·前端·windows·后端·golang
小坏讲微服务10 小时前
Spring Cloud Alibaba 整合 Scala 教程完整使用
java·开发语言·分布式·spring cloud·sentinel·scala·后端开发
w***744020 小时前
SQL Server2022版详细安装教程(Windows)
windows
ruleslol1 天前
Spring Cloud: Sentinel入门讲解
spring cloud·sentinel