Skip to content

Commit 821ae43

Browse files
committed
optimize
1 parent 5a5b093 commit 821ae43

File tree

4 files changed

+25
-11
lines changed

4 files changed

+25
-11
lines changed

core/src/main/java/org/dromara/dynamictp/core/notifier/chain/filter/SilentCheckFilter.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,13 @@ public void doFilter(BaseNotifyCtx context, Invoker<BaseNotifyCtx> nextInvoker)
5454
}
5555

5656
protected boolean isSilent(BaseNotifyCtx context) {
57-
ExecutorWrapper executorWrapper = context.getExecutorWrapper();
57+
// silence period <= 0 indicates that no silence check will be conducted.
5858
NotifyItem notifyItem = context.getNotifyItem();
59+
if (notifyItem.getSilencePeriod() <= 0) {
60+
return false;
61+
}
62+
63+
ExecutorWrapper executorWrapper = context.getExecutorWrapper();
5964
String lockKey = executorWrapper.getThreadPoolName();
6065
Lock lock = LOCK_MAP.computeIfAbsent(lockKey, k -> new ReentrantLock());
6166

extension/extension-limiter-redis/src/main/java/org/dromara/dynamictp/extension/limiter/redis/ratelimiter/RedisRateLimiter.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ public interface RedisRateLimiter<T> {
5656
String[] getArgs(String key, long windowSize, int limit);
5757

5858
/**
59-
* check.
59+
* Acquires permission of an invocation only if it is available at the time of invoking.
6060
*
6161
* @param name the key
6262
* @param interval the interval
6363
* @param limit the limit
6464
* @return the result
6565
*/
66-
boolean check(String name, long interval, int limit);
66+
boolean tryPass(String name, long interval, int limit);
6767

6868
}

extension/extension-limiter-redis/src/main/java/org/dromara/dynamictp/extension/limiter/redis/ratelimiter/RedisRateLimiterNotifyFilter.java

+16-7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.dromara.dynamictp.extension.limiter.redis.ratelimiter;
1919

2020
import lombok.extern.slf4j.Slf4j;
21+
import org.dromara.dynamictp.common.entity.NotifyItem;
2122
import org.dromara.dynamictp.common.pattern.filter.Invoker;
2223
import org.dromara.dynamictp.core.notifier.chain.filter.NotifyFilter;
2324
import org.dromara.dynamictp.core.notifier.context.BaseNotifyCtx;
@@ -43,13 +44,21 @@ public int getOrder() {
4344
}
4445

4546
@Override
46-
public void doFilter(BaseNotifyCtx context, Invoker<BaseNotifyCtx> nextFilter) {
47-
String notifyName = context.getExecutorWrapper().getThreadPoolName() + "#" + context.getNotifyItemEnum().getValue();
48-
int silencePeriod = context.getNotifyItem().getSilencePeriod();
49-
int clusterLimit = context.getNotifyItem().getClusterLimit();
50-
boolean checkResult = redisScriptRateLimiter.check(notifyName, silencePeriod, clusterLimit);
51-
if (checkResult) {
52-
nextFilter.invoke(context);
47+
public void doFilter(BaseNotifyCtx context, Invoker<BaseNotifyCtx> nextInvoker) {
48+
if (tryPass(context)) {
49+
nextInvoker.invoke(context);
5350
}
5451
}
52+
53+
private boolean tryPass(BaseNotifyCtx context) {
54+
// silence period <= 0 indicates that no rate limit check is required.
55+
NotifyItem notifyItem = context.getNotifyItem();
56+
if (notifyItem.getSilencePeriod() <= 0) {
57+
return true;
58+
}
59+
String notifyName = context.getExecutorWrapper().getThreadPoolName() + "#" + context.getNotifyItemEnum().getValue();
60+
int silencePeriod = notifyItem.getSilencePeriod();
61+
int clusterLimit = notifyItem.getClusterLimit();
62+
return redisScriptRateLimiter.tryPass(notifyName, silencePeriod, clusterLimit);
63+
}
5564
}

extension/extension-limiter-redis/src/main/java/org/dromara/dynamictp/extension/limiter/redis/ratelimiter/SlidingWindowRateLimiter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public String[] getArgs(String key, long windowSize, int limit) {
6262
}
6363

6464
@Override
65-
public boolean check(String name, long interval, int limit) {
65+
public boolean tryPass(String name, long interval, int limit) {
6666
try {
6767
val res = isAllowed(name, interval, limit);
6868
if (CollectionUtils.isEmpty(res)) {

0 commit comments

Comments
 (0)