写点什么

Springboot 整合 Current-Limiting 实现接口限流

  • 2021 年 11 月 11 日
  • 本文字数:1061 字

    阅读完需:约 3 分钟

#系统启动保护时间为 0


initial-delay: 0


然后是写测试接口,使用限流注解标记接口的并发量 QPS :


@RequestMapping("/testLimit")


@CurrentLimiter(QPS = 5)


public String testLimit1() throws InterruptedException {


//业务处理......


return "success";


}


@CurrentLimiter(QPS = 5)? 这个注解里的 QPS =5 就是当前接口的每秒的并发量 。


最后再针对限流的访问做一个返回处理,新建 MyCurrentLimitHandler.class :


import cn.yueshutong.springbootstartercurrentlimiting.annotation.CurrentLimiter;


import cn.yueshutong.springbootstartercurrentlimiting.handler.CurrentAspectHandler;


import com.alibaba.fastjson.JSONObject;


import org.aspectj.lang.ProceedingJoinPoint;


import org.springframework.stereotype.Component;


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


/**


  • @Author : JCccc

  • @CreateTime : 2020/4/20

  • @Description :


**/


@Component


public class MyCurrentLimitHandler implements CurrentAspectHandler {


@Override


public Object around(ProceedingJoinPoint pjp, CurrentLimiter rateLimiter) {


//限流的返回数据可以自己根据需求场景设计


JSONObject jsonObject=new JSONObject();


jsonObject.put("resultCode",10011);


jsonObject.put("msg","接口访问繁忙,休息一下");


return jsonObject.toString();


}


}


ps: 有兴趣的可以点进源码里面看,其实是我们非常熟悉的注解方式使用 AOP 的环绕。


第二部分,接口限流测试




我这边使用的是 Apache JMeter 压测工具给大家做个测试(大家不想额外用这种测试工具的话,设置并发 QPS=1,然后手速快一点,再配合在接口里面 sleep 一下,也是能测试的,不过作为东道主,我就用这些专业点的给你们展示),


设置每秒 10 个并发



调用看下结果:


接口调用成功的返回是 success:



因为限流返回的失败处理是:



整体的结果是:



ps:提前跟小杠们说的 不是代码里设置的每秒 5 个并发么,为什么成功的才 4 个?


这个问题不做回应。


好了,这次 springboot 整合 Current-Limiting 实现接口限流 就到此吧,其实看到 yml 的配置项,是可以设置系统级别的限流,但是该篇不做介绍,这些可以自己调试下就好,都是开箱即用。


ps:


这个限流 jar 不同版本差异还是存在的,如果是简单的单机使用,就用 0.0.1 版本即可:


0.0.1.RELEASE:单点限流,注解+全局配置。


0.0.2.RELEASE:结合 Redis 实现集群限流,使用选举算法选出 Master 节点。


0.0.3.RELEASE:可自定义规则限流、增加令牌桶算法与漏桶算法的切换,纳秒级并发控制。

评论

发布
暂无评论
Springboot 整合 Current-Limiting 实现接口限流