Spring Cloud Gateway限流(二)

2023-04-11 09:57:10 浏览数 (2)

步骤四:配置过滤器

在application.yml文件中配置限流过滤器:

代码语言:javascript复制
spring:
  cloud:
    gateway:
      default-filters:
        - name: RedisRateLimiter
          args:
            key-resolver: "#{@pathKeyResolver}"
            permits: 10
            duration: 1
            header: X-RateLimit-Header

我们在这里将该过滤器命名为RedisRateLimiter,并设置了一些参数,如key-resolver(用于解析Redis键)、允许的请求数量(permits)、限流时间(duration)和请求头中的标识符(header)。

步骤五:创建键解析器

创建一个名为PathKeyResolver的类来解析Redis键:

代码语言:javascript复制
@Component
public class PathKeyResolver implements KeyResolver {

    @Override
    public Mono<String> resolve(ServerWebExchange exchange) {
        return Mono.just(exchange.getRequest().getPath().toString());
    }
}

这个解析器简单地将请求路径作为键,使用Mono.just将其包装在Mono容器中,以与Reactive RedisTemplate一起使用。

步骤六:测试限流

现在,我们可以使用Postman等工具测试我们的限流过滤器是否有效了。我们可以使用以下方式来测试:

  1. 使用Postman发送10个请求(或更多)到我们的API端点。
  2. 然后等待1秒钟(或更长时间),再次发送10个请求。
  3. 应该看到第一个批次的所有请求都成功,而第二个批次的所有请求都应该被拒绝,并返回429(过多请求)状态码。

0 人点赞