一、实战说明
1.1 效果说明
- 本篇主要讲如何使用Semaphore对单接口进行限流,例如有如下场景
- A系统的有a接口主要给B系统调用,现在希望对B系统进行限流,例如处理峰值在100,超过100的请求快速失败
- 接口作为总闸入口,希望限制所有外来访问,例如某个房间只能同时100个玩家在线,只有前面的处理完后面的才能继续请求
- 其他类型场景,也就是资源固定的情况下需要轮流使用资源的可以采用Semaphore
- 不适用场景
- 由于是针对总入口进行限流,所以不能根据IP或者token等进行限流,适用场景比较固定
- 后续的博客中会介绍如何使用其他的针对IP/Token级别的限流,例如AOP+Redis+Lua进行限流
- 优点主要有
- 相比针对IP级别的限流,Semaphore实现相对简单,对上述场景能快速实现限流效果
- 实现和原理难度:☆☆
1.2 核心知识点
- 主要使用以下技术点
- springboot
- juc包中的Semaphore(tryAcquire、release方法)
- Semaphore主要说明
- Semaphore中可以通过tryAcquire和acquire获取到一个许可证(默认),通过release释放许可证
- 两个获取许可证的主要区别就是前者是非阻塞而后者阻塞,如果我们要实现快速失败的效果,就必须使用非阻塞获取许可证方法

本文介绍了如何使用Java的Semaphore对单接口进行限流,以限制并发访问量,如控制房间同时在线玩家数量。文章讲解了Semaphore的核心知识点,包括tryAcquire和release方法,并强调了正确释放许可证的重要性。通过SpringBoot项目实战,展示了限流的实现过程,并使用Apache JMeter进行并发请求测试,证明了限流效果。
最低0.47元/天 解锁文章
450

被折叠的 条评论
为什么被折叠?



