我们正在我们的organization.We中编写一个全新的spring-boot-2应用程序,正在探索如何在api之上实现节流?有哪些框架可以用spring引导实现节流?我们可以使用resilence4j或Netflix Zuul RateLimiter来实现这一点吗?
发布于 2020-07-10 02:34:26
在不使用外部依赖项的情况下,可以将其实现为筛选器:
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;
}发布于 2020-07-10 04:49:10
resilience4j RateLimiter是一个不错的选择,因为resilience4j是一个轻量级和模块化的库。只有极小的配置。此外,它还将向计量器注册表发布这些指标。
resilience4j也很容易与Spring集成。它为它提供反应堆操作人员。
发布于 2022-10-06 08:24:00
使用weddini依赖项
<dependency>
<groupId>com.weddini.throttling</groupId>
<artifactId>spring-boot-throttling-starter</artifactId>
<version>0.0.9</version>
</dependency>您只需在服务方法上使用@Throttling注释来启用默认或自定义实现的节流。例如,
//this is the default implementation
@Throttling
public void serviceMethod() {}
//annotation above is equivalent to this
@Throttling(type = ThrottlingType.RemoteAddr, limit = 1, timeUnit = TimeUnit.SECONDS)
public void serviceMethod() {}https://stackoverflow.com/questions/62825536
复制相似问题