springcloud的热点数据进行流控

简单理解就是,同样请求一个接口的入参,针对该参数对应是规定值的数据请求,进行控制,比如我一个接口的一个参数为id,如果id值为1002、1003的入参进行热点控制,别的id值不控制随意请求。

采用的是sentinel进行热点数据控制

 

 设置如下

这个热点设置,需要借助@SentinelResource进行实现,这个资源名就是该注解中的value对应的值

限流模式:采用QPS模式;

参数索引:就是对该资源下哪个参数进行热点控制,比如接口中有3个入参,你需要对第二个入参进行热点控制,那此处就是填写1(注意,是从0开始的整数,0代表接口中第一个入参);

单机阈值:①如果大部分是热点数据,那就针对热点数据进行流控,即此处填写的热点流量的阈值(比如10000);②如果大部分是普通数据,那就针对普通流量进行设置阈值(比如10)。

统计窗口时长:可以根据场景设置。假如填写1s,意思就是1秒内QPS为10次的时候进行控制

点击高级选项,下面就是针对具体的需要特殊处理的热点数据进行流量控制,参数类型就是入参类型是什么,参数值就是该参数索引对应入参的那个值对应具体的数据,限流阈值也就是该入参为参数值的时候,超过这个限流阈值的时候就会被限流,如上图所示就是,当第1个参数(类型为int),值为1的时候,限流阈值2。

以下为代码demo:

复制代码
@RestController
@RequestMapping("/order")
public class OrderController {


    @GetMapping("/hotData/{id}/")
    @SentinelResource(value = "getById",blockHandler = "HotDataBlockHandler")
    public String getById(@PathVariable Integer id){
        System.out.println("id = " + id);return "正常访问";
    }

    public String HotDataBlockHandler(@PathVariable Integer id,BlockException e){
        return "热点数据异常处理";
    }
复制代码

当1秒内请求超过2次就会被限流

 当然,这里的热点配置,一个接口多个入参,而只能是一个入参设置为热点限流,也就是说,如果某个接口有四个参数,而这四个参数都需要做热点控制,那就需要设置四个(一般不会出现这样的情况),这个就很不人性化,应该是后面sentinel后面的版本会有更好的解决方法。

 

以上内容纯学习使用!

 

posted @   多多指教~  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示