[Java] A tiny Rate Limiter Library for Spring MVC
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
In microservice world the problem of high load is exteremely big especially when we have a REST API which is accessed quite extensively. Why do we need throttling? The main answer is to decrease the load of the service at the moment. Different frameworks have different solutions, mostly some additional libraries. Also there is a Guava RateLimiter and Bucket4J . What is interesting Spring MVC being one of the most popular solutions for building REST APIs (thank you Spring Boot) doesn't have any built in rate limiter. As for external solutions there not that many ways around.
Today, I would like to present a tiny experimental library specific for Spring MVC. It is called SpringRateLimitter. The library is very tiny ,works in runtime. The idea is to annotate entire rest controller or specific method , than count the number of incoming requests for the annotated URI and based on the values check if we exceed the allowed number of calls. In case of exceeding an HTTP error code 429 is thrown and after the throttling period is over , the endpoint is available again.
So How does it look like. As first step Maven dependency must be added
<dependency>
<groupId>io.github.abondar24</groupId>
<artifactId>SpringRateLimitter</artifactId>
<version>0.0.2-SNAPSHOT</version>
</dependency>
As second step package with the controllers must be specified applicaiton.yaml or application.properties
controller:
package: org.abondar.industrial.widgetstack.controller
As first example let's see how annotation works on controller level.
@RestController
@RequestMapping("/widget")
@RateLimit
public class WidgetController {
In such scenario all the calls of under /widget are throttled. We haven't specified any value for the number of requests or the period of throttling ,so the default values of 1000 requests and 1 millisecond will be used.
As second example let's annotate a specific method.
@GetMapping(path = "/many",produces ="application/json")
@RateLimit(requests = 3, period = 5000)
public ResponseEntity<List<Widget>>
As you can see you can see specific number of requests and throttling period were set,so they will be used. If controller has its own values, method ones will ignore it. Negative values are not possible and in case of setting them ,compilation will fail. Instead of conclusionAs you can see the library is tiny and easy to use. This is an experimental version of it, multiple features are missing, so fill free to suggest improvements or new ideas either here or on my Github. The repository of the library is https://github.com/abondar24/SpringRateLimitter
Any feedback will be extremely useful.
===========
Источник:
habr.com
===========
Похожие новости:
- [JavaScript, Анализ и проектирование систем, Алгоритмы, Обработка изображений, Машинное обучение] Мы создали Web приложение для определения лиц и масок для Google Chrome (перевод)
- [Разработка веб-сайтов, JavaScript, ReactJS] Реализация архитектуры Redux на MobX. Часть 2: «Пример на MobX»
- [CSS, JavaScript, HTML] Веб-компоненты проще, чем вы думаете (перевод)
- [Разработка веб-сайтов, JavaScript, Программирование, Проектирование и рефакторинг, ReactJS] Фреймворк-независимое браузерное SPA (перевод)
- [CSS, JavaScript] Заметки фронтендера #1
- [Программирование, Java, Венчурные инвестиции, Читальный зал, Финансы в IT] Мой маржин-кол: как теряют деньги на бирже
- [Разработка веб-сайтов, JavaScript, ReactJS] Нарушает ли React DOM-стандарты?
- [Python, Java, Разработка под Android, Искусственный интеллект, Flask] Играем с CLIP. Создаем универсальный zero-shot классификатор на Android
- [Разработка веб-сайтов, JavaScript, ReactJS] Реализация архитектуры Redux на MobX. Часть 1: «Проблемные места Redux»
- Google продемонстрировал эксплуатацию уязвимостей Spectre через выполнение JavaScript в браузере
Теги для поиска: #_java, #_throttling, #_java, #_springboot, #_spring_mvc, #_java
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:00
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
In microservice world the problem of high load is exteremely big especially when we have a REST API which is accessed quite extensively. Why do we need throttling? The main answer is to decrease the load of the service at the moment. Different frameworks have different solutions, mostly some additional libraries. Also there is a Guava RateLimiter and Bucket4J . What is interesting Spring MVC being one of the most popular solutions for building REST APIs (thank you Spring Boot) doesn't have any built in rate limiter. As for external solutions there not that many ways around. Today, I would like to present a tiny experimental library specific for Spring MVC. It is called SpringRateLimitter. The library is very tiny ,works in runtime. The idea is to annotate entire rest controller or specific method , than count the number of incoming requests for the annotated URI and based on the values check if we exceed the allowed number of calls. In case of exceeding an HTTP error code 429 is thrown and after the throttling period is over , the endpoint is available again. So How does it look like. As first step Maven dependency must be added <dependency>
<groupId>io.github.abondar24</groupId> <artifactId>SpringRateLimitter</artifactId> <version>0.0.2-SNAPSHOT</version> </dependency> controller:
package: org.abondar.industrial.widgetstack.controller As first example let's see how annotation works on controller level. @RestController
@RequestMapping("/widget") @RateLimit public class WidgetController { As second example let's annotate a specific method. @GetMapping(path = "/many",produces ="application/json")
@RateLimit(requests = 3, period = 5000) public ResponseEntity<List<Widget>> Any feedback will be extremely useful. =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:00
Часовой пояс: UTC + 5