Ratelimiter-限流器的使用

RateLimiter

限流器的使用,一般用于接口qps或者某种资源的访问速率的限制

  1. 引入依赖

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>25.1-jre</version>
    </dependency>
    
  2. 代码实战,限制某个接口的qps为3

    public class RateLimiterDemo {
    
        //新建一个每秒限制3个的令牌桶
        public static RateLimiter rateLimiter = RateLimiter.create(3,1, TimeUnit.SECONDS);
        public static ExecutorService executor = Executors.newFixedThreadPool(10);
    
    
        public static void main(String[] args) {
            for (int i = 0; i < 10; i++) {
                executor.execute(() -> {
                    //获取令牌桶中一个令牌,最多等待10秒
                    if (rateLimiter.tryAcquire(1, 4, TimeUnit.SECONDS)) {
                        testInterface();
                        System.out.println(Thread.currentThread().getName()+" "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
                    }else {
                        System.out.println("请求频繁,限流住了");
                    }
                });
            }
        }
    
        public static void testInterface(){
            //to do
            //假设这个是上游接口,最大支持qps为3
            System.out.println("访问接口成功");
        }
    }
    
    

    结果:

image

参考:

  1. https://zhuanlan.zhihu.com/p/69986837
posted @   orangeScc  阅读(450)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示