在开发中使用zuul 作为微服务的网关,并使用google 的RateLimter 实现限流功能。
@Component
public class RateLimitFilter extends ZuulFilter{
private static final RateLimiter RATE_LIMITER = RateLimiter.create(100);
@Override
public String filterType() {
return PRE_TYPE;
}
@Override
public int filterOrder() {
return SERVLET_DETECTION_FILTER_ORDER - 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
if (!RATE_LIMITER.tryAcquire()) {
throw new RateLimitException();
}
return null;
}
}
1.实现ZuulFilter 过滤器
2.设置限流数量
3.这个RateLimter 类是基于令牌桶算法实现限流的