Package com.bytedesk.core.aop
Class ApiRateLimiterAspect
java.lang.Object
com.bytedesk.core.aop.ApiRateLimiterAspect
https://springdoc.cn/spring/core.html#aop
https://blog.csdn.net/MICHAELKING1/article/details/106058874
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate BytedeskPropertiesprivate static final doubleprivate static final ConcurrentMap<String,com.google.common.util.concurrent.RateLimiter> private static final ConcurrentMap<String,com.google.common.util.concurrent.RateLimiter> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidadjustIpLimit(String ipAddress, String methodName, double newRate) 调整特定IP的QPS限制voidprivate booleancheckIpRateLimit(String ipAddress, String methodName) 检查IP限流private ObjectdoMethodRateLimit(org.aspectj.lang.ProceedingJoinPoint point, Method method, ApiRateLimiter apiRateLimiter) 执行方法级别的限流检查pointcut(org.aspectj.lang.ProceedingJoinPoint point) voidresetIpLimit(String ipAddress) 重置指定IP的限流状态
-
Field Details
-
bytedeskProperties
-
RATE_LIMITER_CACHE
private static final ConcurrentMap<String,com.google.common.util.concurrent.RateLimiter> RATE_LIMITER_CACHE -
IP_RATE_LIMITER_CACHE
private static final ConcurrentMap<String,com.google.common.util.concurrent.RateLimiter> IP_RATE_LIMITER_CACHE -
DEFAULT_IP_QPS
private static final double DEFAULT_IP_QPS- See Also:
-
IP_ACCESS_COUNT_CACHE
-
-
Constructor Details
-
ApiRateLimiterAspect
public ApiRateLimiterAspect()
-
-
Method Details
-
apiRateLimit
public void apiRateLimit() -
pointcut
- Throws:
Throwable
-
doMethodRateLimit
private Object doMethodRateLimit(org.aspectj.lang.ProceedingJoinPoint point, Method method, ApiRateLimiter apiRateLimiter) throws Throwable 执行方法级别的限流检查- Throws:
Throwable
-
checkIpRateLimit
检查IP限流- Parameters:
ipAddress- 客户端IP地址methodName- 调用的方法名- Returns:
- 是否允许访问
-
resetIpLimit
重置指定IP的限流状态- Parameters:
ipAddress- IP地址
-
adjustIpLimit
调整特定IP的QPS限制- Parameters:
ipAddress- IP地址methodName- 方法名newRate- 新的QPS限制
-