• Springboot限流工具之CurrentLimiting


    1.工具简介

    CurrentLimiting:基于令牌桶算法和漏桶算法实现的纳秒级分布式无锁限流插件,完美嵌入SpringBoot、SpringCloud应用,支持接口限流、方法限流、系统限流、IP限流、用户限流等规则,支持设置系统启动保护时间(保护时间内不允许访问),提供快速失败与CAS阻塞两种限流方案,开箱即用

    2.引入包和配置

    maven包的引入

    <dependency>
      <groupId>cn.yueshutong</groupId>
      <artifactId>spring-boot-starter-current-limiting</artifactId>
      <version>0.0.8.RELEASE</version>
    </dependency>

    application.yml配置

    current:
      limiting:
        #开启全局限流
        enabled: false
        #开启注解限流,可使注解失效
        part-enabled: true
          #每秒并发量 这里的qps是全局限流开启的时候的值,如果使用注解在注解里设置QPS值
        qps: 100
          #开启快速失败,可切换为阻塞
        fail-fast: true
          #系统启动保护时间为0
        initial-delay: 0
    

    3. 接口限流代码

    1.接口代码   @CurrentLimiter(QPS = 2)  这个注解里的QPS =2 就是当前接口的每秒的并发量

    @RestController
    public class MyController {
        @RequestMapping("/hello")
        @CurrentLimiter(QPS = 2)
        public String hello(){
            return "hello";
        }
    }
    

    2. 拒绝策略:针对限流的访问做一个返回处理,新建MyCurrentLimitHandler.class

    @Component
    public class MyCurrentLimitHandler  implements CurrentAspectHandler {
        @Override
        public Object around(ProceedingJoinPoint pjp, CurrentLimiter rateLimiter)  {
     
            //限流的返回数据可以自己根据需求场景设计
     
            JSONObject jsonObject=new JSONObject();
     
            jsonObject.put("code",500);
            jsonObject.put("msg","接口访问繁忙,休息一下");
            return jsonObject.toString();
        }
    }
    

    4.接口限流测试

    已经用jemter或者调用工具手动测试,发现每秒接口并发超过2的时候会返回我们定义的提示信息:

    接口访问繁忙,休息一下

    5.集群限流

    集群限流的目的是对相同实例(即ApplicationName)的集群进行统一的限流,前提是已经开启并配置好Redis,直接开启即可:

    spring:
        redis:
            host: 127.0.0.1
            password: 
            port: 6379
    #一行开启
    current:
        limiting:
            cloud-enabled: true
    

    6.自定义限流规则

    在实际场景中,我们的限流规则并不只是简单的对整个系统或单个接口进行流控,需要考虑的是更复杂的场景。例如:

    1. 对请求的目标URL进行限流(例如:某个URL每分钟只允许调用多少次)
    2. 对客户端的访问IP进行限流(例如:某个IP每分钟只允许请求多少次)
    3. 对某些特定用户或者用户组进行限流(例如:非VIP用户限制每分钟只允许调用100次某个API等)
    4. 多维度混合的限流。此时,就需要实现一些限流规则的编排机制。与、或、非等关系。

    7.总结

    CurrentLimiting支持单接口限流,单机限流和集群限流。基本能完成业务常用的需求。是一个非常值得选择的限流工具。

    框架源码地址

    作者:森林木马

    -------------------------------------------

    特此声明:所有评论和私信都会在第一时间回复。也欢迎朋友们指正错误,共同进步!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    个性签名:好记性不如勤随笔,好随笔还请多关注!

  • 相关阅读:
    寒假学习进度九
    寒假学习进度八
    RestTemplate-记录
    Axure licensee key 8~9-转
    Mysql数据库引擎介绍--转载
    Mysql外键约束--转载
    IDEA快捷建使用
    MySQL在windows上多次安装失败
    五款优秀的端口扫描工具
    java 图片处理 base64编码和图片二进制编码相互转换-转载
  • 原文地址:https://www.cnblogs.com/owenma/p/15646765.html
Copyright © 2020-2023  润新知