Springboot 整合 Current-Limiting 实现接口限流
该篇文章内容:
1.实现标题中提到的接口限流
2.使用压测工具jmeter给大家展现验证效果
第一部分,代码的实现
首先是导入依赖包:
<dependency><groupId>cn.yueshutong</groupId><artifactId>spring-boot-starter-current-limiting</artifactId><version>0.0.1.RELEASE</version></dependency>
然后是application.yml :
current:limiting:#开启全局限流enabled: false#开启注解限流,可使注解失效part-enabled: true#每秒并发量 这里的qps是全局限流开启的时候的值,如果使用注解在注解里设置QPS值qps: 100#开启快速失败,可切换为阻塞fail-fast: true#系统启动保护时间为0initial-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;/*** @Author : JCccc* @CreateTime : 2020/4/20* @Description :**/
@Component
public class MyCurrentLimitHandler implements CurrentAspectHandler {@Overridepublic 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:可自定义规则限流、增加令牌桶算法与漏桶算法的切换,纳秒级并发控制。
0.0.4.RELEASE:解决大规模限流器注册而长时间不使用导致的内存泄漏问题,定时删除过期的限流器对象,秒级。统一线程池管理,并可定义核心线程数。
0.0.5.RELEASE:去掉集群限流器的锁操作,改进令牌桶算法,实现真正的无锁限流。使用享元模式减少大量对象的创建。
0.0.6.RELEASE:使用Lua脚本减少Redis网络请求次数。
0.0.7.RELEASE:从SpringBoot2切换到SpringBoot1.5开发。
0.0.8.RELEASE:修复了0.0.7版本的集群限流失效bug。
Springboot 整合 Current-Limiting 实现接口限流相关推荐
- 轻松两步,我在 SpringBoot 服务上实现了接口限流
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视 ...
- 亿级流量场景下如何为HTTP接口限流?看完我懂了!!
这里,我们实现Web接口限流,具体方式为:使用自定义注解封装基于令牌桶限流算法实现接口限流. 不使用注解实现接口限流 搭建项目 这里,我们使用SpringBoot项目来搭建Http接口限流项目,Spr ...
- Spring Cloud Alibaba基础教程:使用Sentinel实现接口限流
点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 最近管点闲事浪费了不少时间,感谢网友们的留言提醒. 及时纠正路线,继续跟大家一起学习Spring Cl ...
- Gateway配合sentinel自定义限流_你知道如何使用阿里Sentinel实现接口限流吗?
Nacos作为注册中心和配置中心的基础教程,到这里先告一段落,后续与其他结合的内容等讲到的时候再一起拿出来说,不然内容会有点跳跃.接下来我们就来一起学习一下Spring Cloud Alibaba下的 ...
- 后端技术:阿里开源的接口限流神器Sentinel介绍
Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面. 在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数:或者按照某种规则进行限流,如限制i ...
- 接口限流算法:漏桶算法amp;令牌桶算法
转载自 接口限流算法:漏桶算法&令牌桶算法 背景 每一个对外提供的API接口都是需要做流量控制的,不然会导致系统直接崩溃.很简单的例子,和保险丝的原理一样,如果用电符合超载就会烧断保险丝断掉电 ...
- Redis 做接口限流
Redis 除了做缓存,还能干很多很多事情:分布式锁.限流.处理请求接口幂等性...太多太多了- 今天想和小伙伴们聊聊用 Redis 处理接口限流,这也是最近的 TienChin 项目涉及到这个知识点 ...
- 微服务接口限流的设计与思考(附GitHub框架源码)
http://www.infoq.com/cn/articles/microservice-interface-rate-limit?useSponsorshipSuggestions=true&am ...
- IDEA中进行SpringBoot整合spring-ws开发webservice接口后期要修改xsd文件流程
场景 SpringBoot整合spring-ws开发webservice接口(全流程详细教程) 参照: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/articl ...
最新文章
- 原创 | 工业场景中的预测性维护
- 当我们输入一条SQL查询语句时,发生了什么?
- Intellij Idea debug 模式如果发现异常,即添加异常断点在发生异常处
- MySQL Proxy 安装与读写分离体验
- 嵌入式C语言基础链表
- 刚入职场的菜鸟,这些大数据知识点,你必须掌握了!
- 治病花了130万才明白:不要轻易买保险
- 从numpy里加载_PyTorch强化:01.PyTorch 数据加载和处理
- Java的transient关键字
- Ueditor结合七牛云及百度云存储(JAVA版,ueditor-1.4.3)实现图片文件上传
- 北大OJ(POJ 2503)在线翻译
- 最简单的零成本创业模式
- VS 2010 for SharePoint
- iOS 8.0正式公布啦
- STM32用于PWM占空比测量
- 企业的主数据建设方法论与实践 | 推荐收藏
- WORD2003无法打开WORD2000文档解决方法
- 绝无仅有!绝无仅有的史上最好shell替代工具
- 【沽泡学院07】基于ElasticSearch搜索附近的人
- TVbox带会员带推广版本