#java #rate-limiting
Вопрос:
Я хотел бы применить несколько ограничений скорости, используя Bucket4j. Таким образом, один лимит скорости на основе номера учетной записи (10 запросов в секунду для конкретного номера учетной записи) и другой общий лимит скорости подачи заявок ( 100 запросов в секунду для всех учетных записей)
Я вижу следующий пример:
Bucket bucket = Bucket4j.builder()
// allows 1000 tokens per 1 minute
.addLimit(Bandwidth.simple(1000, Duration.ofMinutes(1)))
// but not often then 50 tokens per 1 second
.addLimit(Bandwidth.simple(50, Duration.ofSeconds(1)))
.build();
Однако это больше ограничивает частоту пакетов в разные периоды времени в одном и том же сегменте.
Я предполагаю, что у меня были бы ведра для всех учетных записей и ведро приложений, и мне нужно было бы проверить соответствующее ведро учетных записей и общее ведро?
if (accountBucket.tryConsume(1) amp;amp; applicationBucket.tryConsume(1)) {
... make request
}