Comments 18
Это не статья, а сообщение в стиле: "смотри, что я запилил". Было бы не плохо описать детали реализации и примеры использования, а не тупо кинуть ссылки на гитхаб

Requests, Карл! Requests!
А бэкенд-программист пишется через дефис. В русском языке нельзя просто взять и поставить два существительных рядом, как в английском. Зело, люто негодую, когда забывают про дефисы. Считаю своим долгом в комментариях к каждой статье упоминать о них. Жар-птица, Иван-дурак, бизнес-требования, бэкенд-разработчик!
поправил. сложно пилить хобби проекты по вечерам и выходным
ExecutorService cleanHistoryExecutor = Executors.newSingleThreadExecutor();
Я конечно не сварщик. И в джаве не разбираюсь, но реализация требует 1 поток на каждый лимитер?
Реализация у вас тоже забагованная. Баги есть и в логике работы и в реализации этой логики.
Мультипоточный конкурентный код это сложно и совсем не очевидно.
В первую очередь в голову приходит https://github.com/Netflix/Hystrix
Оверкилл. Он довольно сложен и нормально его заиспользовать не очень тривиально. Сейчас уже есть попроще варианты.
Что-то такое лучше подойдет https://developer.redis.com/develop/java/spring/rate-limiting/fixed-window/reactive
Ну я не джава сварщик, просто про эту штуку знаю.
поход по сети, чтобы узнать лимит - невозможен.
в некоторых случаях (это основной критерий, почему делал свою либу) это критично
например, вы хотите купить 1 млн долларов по цене 60.80
пока вы ходили по сети (условно 15мс), цена изменилась - 60.70
как результат - прибыль уменьшается или даже убытки появляются
Hystrix в maintenance mode давно, он мертв
и как по вашему с помощью hystrix или аналогов, узнать прямо сейчас можно ли выполнять запрос и при этом: 1) не быть забанненым, если привысить лимит 2) не ходить никуда по сети, чтобы сохранить latency
https://github.com/spring-projects/spring-retry ?
Resilience4j?
Сам не юзал, просто то, что на слуху.
spring-retry это немного для другого - чтобы клиент автоматически мог переотправить запрос, если он упадет.
resilience4j-ratelimiter - уже ближе, но они используют другой алгоритм (как я понимаю), поэтому нельзя накидать (например, покупка валюты по очень интересной цене) запросов (без бана) выше среднего и ждать
моя же либа - ограничить запросы (на клиенте) к серверу, чтобы не быть забаненным или не нарушить его работу, основывается на алгоритме sliding window
rate limiter (sliding window)