一、实战说明
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释放许可证
- 两个获取许可证的主要区别就是前者是非阻塞而后者阻塞,