package com.qianwen.core.redis.ratelimiter;
|
|
import java.util.concurrent.TimeUnit;
|
import com.qianwen.core.tool.function.CheckedSupplier;
|
import com.qianwen.core.tool.utils.Exceptions;
|
|
/* loaded from: blade-starter-redis-9.3.0.0-SNAPSHOT.jar:org/springblade/core/redis/ratelimiter/RateLimiterClient.class */
|
public interface RateLimiterClient {
|
boolean isAllowed(String key, long max, long ttl, TimeUnit timeUnit);
|
|
default boolean isAllowed(String key, long max, long ttl) {
|
return isAllowed(key, max, ttl, TimeUnit.SECONDS);
|
}
|
|
default <T> T allow(String key, long max, long ttl, CheckedSupplier<T> supplier) {
|
return (T) allow(key, max, ttl, TimeUnit.SECONDS, supplier);
|
}
|
|
default <T> T allow(String key, long max, long ttl, TimeUnit timeUnit, CheckedSupplier<T> supplier) {
|
boolean isAllowed = isAllowed(key, max, ttl, timeUnit);
|
if (isAllowed) {
|
try {
|
return (T) supplier.get();
|
} catch (Throwable e) {
|
throw Exceptions.unchecked(e);
|
}
|
}
|
throw new RateLimiterException(key, max, ttl, timeUnit);
|
}
|
}
|