前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sentinel热点限流

Sentinel热点限流

作者头像
背雷管的小青年
发布2020-06-22 14:16:34
8770
发布2020-06-22 14:16:34
举报

目标:Sentinel的基本应用 工具:IDEA--2020.1、Sentinel Maven SpringCloud 学习目标:学习Sentinel热点限流——热点参数限流的使用 本次学习的工程在最后面

1.导入热点参数限流依赖包

代码语言:javascript
复制
    <!--导入热点参数限流依赖包-->
    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-parameter-flow-control</artifactId>
        <version>1.7.1</version>
    </dependency>

2.接下来创建一个REST接口,并定义限流资源名,此处正对id配置限流规则

代码语言:javascript
复制
@RestController
public class ParamRuleController {
    // com.xmaven.controller.ParamRuleController:sayHello(java.lang.String)
    private String resourceName="sayHello";

    @GetMapping("/hello1")
    @ResponseBody
    public String sayHello(@PathParam("id")String id, @PathParam("name")String name){
        Entry entry=null;
        try {
            // 只对参数id进行限流,参数name不进行限制
            entry= SphU.entry(resourceName, EntryType.IN,1,id);
            return "access success";
        } catch (BlockException e) {
            e.printStackTrace();
            return "block";
        }finally {
            if(entry!=null) {
                entry.exit();
            }
        }
    }

    @PostConstruct
    public void initParamRule(){
        ParamFlowRule rule = new ParamFlowRule(resourceName);
        rule.setParamIdx(0);
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        rule.setCount(1);
        ParamFlowRuleManager.loadRules(Collections.singletonList(rule));
    }

}

3.说明

针对不同的热点参数,需要通过SphU.entry(resourceName, EntryType.IN,1,id)方法设置,其最后一个参数是一个数组,有多个热点参数,需要依次按照次序传入,改配置表示后续会正对该参数进行限流。

下面正对上述资源sayHello进行热点参数限流规则,通过ParamFlowRuleManager.loadRules方法加载热点规则

我尝试把版本全部提升到1.7.2发现不兼容,建议都是用springcloudalibaba 1.7.1版本的

4.通过测试工具或者快速刷新热点参数限流

访问我们的Sentinel Dashboard,进入实时监控来查看限流效果 访问 http://localhost:8888/hello1?id=123&name=

T_CH8-NSE-VTS3FB-WW.png
T_CH8-NSE-VTS3FB-WW.png
FUDAB)OG7~0{B5WL5SC8O6O.png
FUDAB)OG7~0{B5WL5SC8O6O.png

5.使用@SentinelResource热点参数限流

如果是使用这个注解来定义资源,当注解所配置的方法上有参数时,Sentinel会把这个参数传入给SphU.entry(res,args) 比如下面的代码:

代码语言:javascript
复制
@SentinelResource
@GetMapping("/hello2")
@ResponseBody
public String sayHello2(@PathParam("id")String id){
    return "SUCCESS";
}

默认情况下访问这个接口就会触发热点限流规则的验证。

下载链接:springcloud-sentinel-dynamic-rule2.rar

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.导入热点参数限流依赖包
  • 2.接下来创建一个REST接口,并定义限流资源名,此处正对id配置限流规则
  • 3.说明
  • 4.通过测试工具或者快速刷新热点参数限流
  • 5.使用@SentinelResource热点参数限流
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档