步骤四:配置过滤器
在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等工具测试我们的限流过滤器是否有效了。我们可以使用以下方式来测试:
- 使用Postman发送10个请求(或更多)到我们的API端点。
- 然后等待1秒钟(或更长时间),再次发送10个请求。
- 应该看到第一个批次的所有请求都成功,而第二个批次的所有请求都应该被拒绝,并返回429(过多请求)状态码。