侧边栏壁纸
博主头像
Epoch

Java开发、Python爬虫、微服务、分布式、前端

  • 累计撰写 92 篇文章
  • 累计创建 109 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Sentinel接入SpringCloud(一)

Epoch
2020-05-10 / 0 评论 / 0 点赞 / 236 阅读 / 690 字 / 正在检测是否收录...

目标:手动配置限流资源保护
工具:IDEA–2020.1、Sentinel、本地服务器(作为测试)
学习目标:手动配置限流资源保护
本次学习的工程下载链接放到文本最后面

  • 创建一个基于Springboot的项目,并集成Greenwich.SR2版本的依赖,并添加Sentinel依赖包:

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    
    </dependencyManagement>
    
  • 创建一个REST接口,并通过@SentinelResource配置限流保护资源
    //创建一个REST接口,并通过@SentinelResource配置限流保护资源

    @RestController
    public class HelloController {
    //配置后触发限流调用blockHandler中的参数资源 多刷新界面几次就能看到效果了
    @SentinelResource(value = “hello”,blockHandler = “blockHandlerHello”)
    @GetMapping(“/say”)
    public String hello(){
    return “hello ,xmaven”;
    }
    public String blockHandlerHello(BlockException e){
    return “被限流了”;
    } }

  • 手动配置限流规则

    //手动配置限流规则,通过Sentinel的InitFunc SPI接口来实现,只需要实现自己的InitFunc接口,并在init方法中编写规则加载的逻辑即可

    //还需要在resource下的META-INF.services下配置这个包的路径com.xmaven.FlowRuleInitFunc
    public class FlowRuleInitFunc implements InitFunc{
    @Override
    public void init() throws Exception {
    List rules=new ArrayList<>();
    FlowRule rule=new FlowRule();
    rule.setCount(1);
    rule.setResource(“hello”);
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule.setLimitApp(“default”);
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
    } }

  • 还要在Resource目录下创建META-INF/com.alibaba.csp.sentinel.init.InitFunc文件,文件就是自动以扩展点的全路径

       com.xmaven.FlowRuleInitFunc
  • 启动服务后,访问http://localhost:8090/say方法,多刷新访问几次,超过设定的阈值,就会触发限流
    54%_K~65R}HP43U0B6WWI9P.png

下载链接:spring-cloud-sentinel-sample.rar

0

评论区