飞道的博客

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

390人阅读  评论(0)

该篇文章内容:

1.实现标题中提到的接口限流

2.使用压测工具jmeter给大家展现验证效果

 

 

 

第一部分,代码的实现

首先是导入依赖包:


  
  1. <dependency>
  2. <groupId>cn.yueshutong</groupId>
  3. <artifactId>spring-boot-starter-current-limiting</artifactId>
  4. <version> 0.0.1.RELEASE</version>
  5. </dependency>

然后是application.yml :


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

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


  
  1. @RequestMapping( "/testLimit")
  2. @CurrentLimiter(QPS = 5)
  3. public String testLimit1() throws InterruptedException {
  4. //业务处理......
  5. return "success";
  6. }

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

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


  
  1. import cn.yueshutong.springbootstartercurrentlimiting.annotation.CurrentLimiter;
  2. import cn.yueshutong.springbootstartercurrentlimiting.handler.CurrentAspectHandler;
  3. import com.alibaba.fastjson.JSONObject;
  4. import org.aspectj.lang.ProceedingJoinPoint;
  5. import org.springframework.stereotype.Component;
  6. /**
  7. * @Author : JCccc
  8. * @CreateTime : 2020/4/20
  9. * @Description :
  10. **/
  11. @Component
  12. public class MyCurrentLimitHandler implements CurrentAspectHandler {
  13. @Override
  14. public Object around(ProceedingJoinPoint pjp, CurrentLimiter rateLimiter) {
  15. //限流的返回数据可以自己根据需求场景设计
  16. JSONObject jsonObject= new JSONObject();
  17. jsonObject.put( "resultCode", 10011);
  18. jsonObject.put( "msg", "接口访问繁忙,休息一下");
  19. return jsonObject.toString();
  20. }
  21. }

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

 

 

第二部分,接口限流测试

 

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

设置每秒100个并发

调用看下结果:

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

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

整体的结果是:

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

这个问题不做回应。

 

 

 

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

 

 

 

 


转载:https://blog.csdn.net/qq_35387940/article/details/105639258
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场