Sentinel热点限流

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

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

    <!--导入热点参数限流依赖包-->
    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-parameter-flow-control</artifactId>
        <version>1.7.1</version>
    </dependency>

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

@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) 比如下面的代码:

@SentinelResource
@GetMapping("/hello2")
@ResponseBody
public String sayHello2(@PathParam("id")String id){
    return "SUCCESS";
}

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Boot集成邮件发送功能

    目标:实现Spring Boot集成邮件发送功能 工具:IDEA--2020.1 学习目标:实现Spring Boot集成邮件发送功能 本次学习的工程下载链接放...

    背雷管的小青年
  • VIM文本编辑器

    eg: :41,44/yang/lee/c 从41行到44行,把yang替换为lee,询问是否替换

    背雷管的小青年
  • Nacos的高可用部署

    目标:Nacos的高可用部署 工具:XShell、云服务器(或者虚拟机)、Nacos安装包 学习目标:部署Nacos

    背雷管的小青年
  • 高职考技能提升教程013期 冒泡排序法和选择排序法

    2.如果是从小到大排序,比较的时候,如果第一个数值比第二个数值要大,那么两个数值之间进行交换。

    刘金玉编程
  • 分布式锁的实现

    锁是为了保证在多线程并发的情况下,只有一个线程执行同步代码块。在一个JVM进程中,可通过synchronized 或者 J.U.C包中的显示并发锁保证。分布式锁...

    Monica2333
  • JFinal框架使用

    表单直接提交页面,不用ajax 后台; /** * 修改 */ public void edit() { Strin...

    二十三年蝉
  • Kafka精进 | Broker服务端核心参数解析

    关于Kafka,我们在之前的文章里也介绍,简而言之Kafka是一个分布式消息引擎与流处理平台,经常用做企业的消息总线、实时数据管道,有时还可以当做存储系统来用。...

    大数据技术架构
  • select 信道好帮手

    select 语句用于在多个发送/接收信道操作中进行选择。select 语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select 会...

    酷走天涯
  • 后台并发模型改进经验分享

    异步IO多线程并发模型通常由监听线程组+工作线程组构成,监听线程负责接收新连接,然后把新连接转给工作线程。

    三棵老松
  • 从升级服务器系统聊聊编写脚本

    本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

    soulteary

扫码关注云+社区

领取腾讯云代金券