0

我正在使用 Bucket4j,我想处理每个令牌的总请求并发

我试过这个,但它并不完全符合我的预期。

public class PricingPlanService {

    private final Map<String, Bucket> cache = new ConcurrentHashMap<>();

    public Bucket resolveBucket(String token) {
        return cache.computeIfAbsent(apiKey, this::newBucket);
    }

    private Bucket newBucket(String token) {
        Bandwidth bandwidth = resolvePlanFromApiKey(token);
        return Bucket4j.builder()
                .addLimit(pricingPlan)
                .build();
    }

    public Bandwidth resolvePlanFromApiKey(String token) {
        if(token.equal(abc))
            return Bandwidth.classic(10, Refill.intervally(10, Duration.ofSeconds(5)));
        return Bandwidth.classic(1, Refill.intervally(1, Duration.ofSeconds(5)));
    }
}

桶将每 5 秒重新填充 10 个请求,但我希望它在来自该令牌的所有 10 个请求完成时重新填充(必须完成之前的 10 个请求)。我怎么能这样做?

4

0 回答 0