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 BytedeskProperties
private static final double
private 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 TypeMethodDescriptionvoid
adjustIpLimit
(String ipAddress, String methodName, double newRate) 调整特定IP的QPS限制void
private boolean
checkIpRateLimit
(String ipAddress, String methodName) 检查IP限流private Object
doMethodRateLimit
(org.aspectj.lang.ProceedingJoinPoint point, Method method, ApiRateLimiter apiRateLimiter) 执行方法级别的限流检查pointcut
(org.aspectj.lang.ProceedingJoinPoint point) void
resetIpLimit
(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限制
-