Browse Source

修改data-redis,针对限流器获取代码增加配置相同性判断,配置有更新时需要强制delete确保新配置设置生效

Signed-off-by: luoshi <luoshi@qmth.com.cn>
luoshi 6 tháng trước cách đây
mục cha
commit
351d61f990

+ 9 - 0
data-redis/src/main/java/com/qmth/boot/redis/rateLimit/RedisRateLimitService.java

@@ -42,6 +42,10 @@ public class RedisRateLimitService implements RateLimitService, RedisConstant {
         //设置了限流时间段,使用Redisson内置限流器
         if (rule.getPeriod().toMillis() > 0) {
             RRateLimiter limiter = redissonClient.getRateLimiter(key);
+            //Key已存在但配置不同需要先删除
+            if (limiter.isExists() && !compareConfig(limiter.getConfig(), rule)) {
+                limiter.delete();
+            }
             limiter.trySetRate(RateType.OVERALL, rule.getCount(), rule.getPeriod().toMillis(),
                     RateIntervalUnit.MILLISECONDS);
             //限流单元默认24小时后自动清理
@@ -58,4 +62,9 @@ public class RedisRateLimitService implements RateLimitService, RedisConstant {
         }
     }
 
+    private boolean compareConfig(RateLimiterConfig config, RateLimitRule rule) {
+        return config != null && config.getRateType().equals(RateType.OVERALL) && config.getRate() == rule.getCount()
+                && config.getRateInterval() == rule.getPeriod().toMillis();
+    }
+
 }