SpringCloud Zuul 限流

淩亂°似流年 2022-04-02 14:11 347阅读 0赞

限流主要是为了防止恶意请求,功能实现放在前置过滤器(Pre)请求被转发之前调用,限流应放在所有的过滤器最前面。

今天介绍的限流方式是令牌桶限流。代码如下

  1. package com.lfv.product.filter;
  2. import org.springframework.stereotype.Component;
  3. import com.google.common.util.concurrent.RateLimiter;
  4. import com.netflix.zuul.ZuulFilter;
  5. import com.netflix.zuul.exception.ZuulException;
  6. import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;
  7. import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SERVLET_DETECTION_FILTER_ORDER;
  8. /**
  9. * 限流过滤器
  10. * @author lf
  11. *
  12. */
  13. @Component
  14. public class RateLimterFilter extends ZuulFilter{
  15. //谷歌令牌桶的实现 100/s 令牌
  16. private static final RateLimiter RATE_LIMITER = RateLimiter.create(100);
  17. @Override
  18. public boolean shouldFilter() {
  19. return true;
  20. }
  21. //没有拿到令牌抛出异常
  22. @Override
  23. public Object run() throws ZuulException {
  24. if(!RATE_LIMITER.tryAcquire()) {
  25. new RuntimeException();
  26. }
  27. return null;
  28. }
  29. @Override
  30. public String filterType() {
  31. return PRE_TYPE;
  32. }
  33. @Override
  34. public int filterOrder() {
  35. return SERVLET_DETECTION_FILTER_ORDER - 1;
  36. }
  37. }

发表评论

表情:
评论列表 (有 0 条评论,347人围观)

还没有评论,来说两句吧...

相关阅读

    相关 zuul

    在项目中,大部分都会使用到hyrtrix做熔断机制,通过某个预定的阈值来对异常流量进行降级处理,除了做服务降级以外,还可以对服务进行限流,分流,排队等。 当然,zuul也能做

    相关 SpringCloud Zuul

    限流主要是为了防止恶意请求,功能实现放在前置过滤器(Pre)请求被转发之前调用,限流应放在所有的过滤器最前面。 今天介绍的限流方式是令牌桶限流。代码如下 packa