Springboot: реализация троттлинга - PullRequest
1 голос
/ 10 июля 2020
• 1000 мы используем resilence4j или Netflix Zuul RateLimiter, чтобы достичь этого?

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

resilience4j RateLimiter - хороший вариант, поскольку resilience4j - это легкая и модульная библиотека. Есть минимальная конфигурация. И он также будет публиковать sh метрики в реестр счетчиков.

resilience4j также легко интегрируется со Spring Webflux. Он предоставляет операторы Reactor для этого.

Документация: resilience4j RateLimiter

2 голосов
/ 10 июля 2020

Без использования внешних зависимостей вы можете реализовать его как фильтр:

public class RpsFilter extends GenericFilterBean {
//...
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        if (rpsGreaterThanMax()) {
            responseSystemBusy((HttpServletResponse) response);
        }
        else {
            chain.doFilter(request, response);
        }
    }
//...
}

А затем добавить его в цепочку фильтров:

@Bean
public FilterRegistrationBean<RpsFilter> rpsFilter(){
    FilterRegistrationBean<RpsFilter> registrationBean = new FilterRegistrationBean<>();
    int maxRps = getMaxRequestsPerSecond(); // from properties file
    registrationBean.setFilter(new RpsFilter(maxRps));
    registrationBean.addUrlPatterns("/api/v1/*"); // url to apply the throttling
    return registrationBean;    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...