一、前言
通过gujava软件包的com.google.common.util.concurrent.RateLimiter的实现通过令牌桶的方式在高并发应用接口场景下进行系统限流,其他限流方式还有漏桶、滑动窗口、计数器等。
二、源码示例
下面RateLimiterTest测试类,通过RateLimiter.create(2)每秒生成两个令牌,下面第一次获取5个令牌,第二部等他延时2.5s(2.497107)、第二次获取2个令牌需要1s(0.994163)
package com.xwood.gujava;@b@@b@import com.google.common.util.concurrent.RateLimiter;@b@@b@public class RateLimiterTest {@b@@b@ public static void main(String[] args) {@b@ RateLimiter rateLimiter = RateLimiter.create(2);@b@ System.out.println(rateLimiter.acquire(5));@b@ System.out.println(rateLimiter.acquire(2));@b@ System.out.println(rateLimiter.acquire(1));@b@ }@b@@b@}
控制台结果
0.0@b@2.497107@b@0.994163