Без использования внешних зависимостей вы можете реализовать его как фильтр:
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;
}