1. 程式人生 > 實用技巧 >【服務限流】Google Guava RateLimiter 本地限流元件

【服務限流】Google Guava RateLimiter 本地限流元件

官方Test樣例:https://github.com/google/guava/blob/master/guava-tests/test/com/google/common/util/concurrent/RateLimiterTest.java

Maven依賴

<dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>20.0</version>
        </
dependency>

核心方法

Demo1: 基礎入門

public class Application2 {
    public static void main(String[] args) {
        // create方法引數permitsPerSecond
        RateLimiter rateLimiter = RateLimiter.create(2);
        System.out.println(rateLimiter.toString());
        List<Runnable> tasks = new ArrayList<Runnable>();
        
for (int i = 0; i < 10; i++) { tasks.add(new UserRequest(i)); } ExecutorService threadPool = Executors.newCachedThreadPool(); for (Runnable runnable : tasks) { System.out.println("等待時間:" + rateLimiter.acquire()); threadPool.execute(runnable); } }
private static class UserRequest implements Runnable { private int id; public UserRequest(int id) { this.id = id; } public void run() { System.out.println(id); } } }

執行效果

RateLimiter[stableRate=2.0qps]
等待時間:0.0
0
等待時間:0.485271
1
等待時間:0.498734
2
等待時間:0.499003
3
等待時間:0.499248
4
等待時間:0.499308
5
等待時間:0.49971
6
等待時間:0.49874
7
等待時間:0.499551
8
等待時間:0.495876
9