feat: 增加获取令牌等待超时方法

This commit is contained in:
lilong 2024-03-21 17:10:06 +08:00
parent 4b0d92cbe9
commit cfe659ca8f
2 changed files with 21 additions and 0 deletions

View File

@ -18,6 +18,8 @@ public interface RateLimiter {
*/ */
boolean tryAcquire(); boolean tryAcquire();
boolean tryAcquire(long timeoutMillis);
/** /**
* 获取窗口类型 * 获取窗口类型
* *

View File

@ -12,6 +12,7 @@ import org.redisson.api.RateType;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
public class RedisRateLimiterImpl implements RateLimiter { public class RedisRateLimiterImpl implements RateLimiter {
@ -26,6 +27,12 @@ public class RedisRateLimiterImpl implements RateLimiter {
private RRateLimiter rateLimiter; private RRateLimiter rateLimiter;
/**
* 默认超时时间毫秒
*/
private static final long DEFAULT_TIME_OUT_MILLIS = 5 * 1000;
@Builder @Builder
RedisRateLimiterImpl(RedissonClient redissonClient, RedisRateLimiterImpl(RedissonClient redissonClient,
WindowType windowType, WindowType windowType,
@ -56,6 +63,11 @@ public class RedisRateLimiterImpl implements RateLimiter {
return rateLimiterWorker.tryAcquire(); return rateLimiterWorker.tryAcquire();
} }
@Override
public boolean tryAcquire(long timeoutMillis) {
return rateLimiterWorker.tryAcquire(timeoutMillis);
}
@Override @Override
public WindowType getWindowType() { public WindowType getWindowType() {
return windowType; return windowType;
@ -89,6 +101,11 @@ public class RedisRateLimiterImpl implements RateLimiter {
public boolean tryAcquire() { public boolean tryAcquire() {
return rateLimiter.tryAcquire(1); return rateLimiter.tryAcquire(1);
} }
@Override
public boolean tryAcquire(long timeoutMillis) {
return rateLimiter.tryAcquire(1, timeoutMillis, TimeUnit.MILLISECONDS);
}
} }
interface RateLimiterWorker { interface RateLimiterWorker {
@ -98,5 +115,7 @@ public class RedisRateLimiterImpl implements RateLimiter {
* @return 如果获取成功则返回true, 失败则为false * @return 如果获取成功则返回true, 失败则为false
*/ */
boolean tryAcquire(); boolean tryAcquire();
boolean tryAcquire(long timeoutMillis);
} }
} }