最近在学习springcloud gateway在学习限流时配置使用的RedisRateLimiter配置了限流,但是redis中无法存入key并且限流无效,但是后台却无报错信息,我使用的是springcloud版本是2.1.1.RELEASE
springcloud gateway限流教程 https://blog.csdn.net/forezp/article/details/85081162
分析源码控制限流的代码主要在RedisRateLimiter中的isAllowed方法
@Override
@SuppressWarnings("unchecked")
//根据keyresolver对request生成1个routeId,然后对该routeId采取其对应的限流
public Mono<Response> isAllowed(String routeId, String id) {
if (!this.initialized.get()) {
throw new IllegalStateException("RedisRateLimiter is not initialized");
}
Config routeConfig = loadConfiguration(routeId);
// How many requests per second do you want a user to be allowed to do?1秒多少个请求
int replenishRate = routeConfig.getReplenishRate();
// How much bursting do you want to allow?令牌桶的总容量
int burstCapacity = routeConfig.getBurstCapacity();
try {
//redis中存有上次请求的时间,上次桶中剩下的令牌数两个key
List<String> keys = getKeys(id);
// The arguments to the LUA script. time() returns unixtime in seconds.
//执行脚本request_rate_limiter.lua(在gateway-core包中),请求中有四个参数 生成令牌速率,桶容量,当前时间,请求令牌数
List<Stri