From 8cd7e3c924b9cef4eef3b0cf35539b53c5ba82f9 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期三, 30 十月 2024 16:43:30 +0800
Subject: [PATCH] update 优化 限流注解增加固定清理时间
---
ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/annotation/RateLimiter.java | 6 ++++++
ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/aspectj/RateLimiterAspect.java | 3 ++-
ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java | 16 +++++++++++++++-
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/annotation/RateLimiter.java b/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/annotation/RateLimiter.java
index de09752..79272d4 100644
--- a/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/annotation/RateLimiter.java
+++ b/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/annotation/RateLimiter.java
@@ -38,4 +38,10 @@
* 鎻愮ず娑堟伅 鏀寔鍥介檯鍖� 鏍煎紡涓� {code}
*/
String message() default "{rate.limiter.message}";
+
+ /**
+ * 闄愭祦绛栫暐瓒呮椂鏃堕棿 榛樿涓�澶�(绛栫暐瀛樻椿鏃堕棿 浼氭竻闄ゅ凡瀛樺湪鐨勭瓥鐣ユ暟鎹�)
+ */
+ int timeout() default 86400;
+
}
diff --git a/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/aspectj/RateLimiterAspect.java b/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/aspectj/RateLimiterAspect.java
index 1f4904a..2d6d82e 100644
--- a/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/aspectj/RateLimiterAspect.java
+++ b/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/aspectj/RateLimiterAspect.java
@@ -54,13 +54,14 @@
public void doBefore(JoinPoint point, RateLimiter rateLimiter) {
int time = rateLimiter.time();
int count = rateLimiter.count();
+ int timeout = rateLimiter.timeout();
try {
String combineKey = getCombineKey(rateLimiter, point);
RateType rateType = RateType.OVERALL;
if (rateLimiter.limitType() == LimitType.CLUSTER) {
rateType = RateType.PER_CLIENT;
}
- long number = RedisUtils.rateLimiter(combineKey, rateType, count, time);
+ long number = RedisUtils.rateLimiter(combineKey, rateType, count, time, timeout);
if (number == -1) {
String message = rateLimiter.message();
if (StringUtils.startsWith(message, "{") && StringUtils.endsWith(message, "}")) {
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java
index a0efde6..355cd29 100644
--- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/RedisUtils.java
@@ -37,8 +37,22 @@
* @return -1 琛ㄧず澶辫触
*/
public static long rateLimiter(String key, RateType rateType, int rate, int rateInterval) {
+ return rateLimiter(key, rateType, rate, rateInterval, 0);
+ }
+
+ /**
+ * 闄愭祦
+ *
+ * @param key 闄愭祦key
+ * @param rateType 闄愭祦绫诲瀷
+ * @param rate 閫熺巼
+ * @param rateInterval 閫熺巼闂撮殧
+ * @param timeout 瓒呮椂鏃堕棿
+ * @return -1 琛ㄧず澶辫触
+ */
+ public static long rateLimiter(String key, RateType rateType, int rate, int rateInterval, int timeout) {
RRateLimiter rateLimiter = CLIENT.getRateLimiter(key);
- rateLimiter.trySetRate(rateType, rate, Duration.ofSeconds(rateInterval));
+ rateLimiter.trySetRate(rateType, rate, Duration.ofSeconds(rateInterval), Duration.ofSeconds(timeout));
if (rateLimiter.tryAcquire()) {
return rateLimiter.availablePermits();
} else {
--
Gitblit v1.9.3