Sentinel热点限流

2020-06-22 14:16:34 浏览数 (2)

目标: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=

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

0 人点赞