diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/interceptor/RequestHeaderContextInterceptor.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/interceptor/RequestHeaderContextInterceptor.java index 233b12fc7..cfc316e8e 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/interceptor/RequestHeaderContextInterceptor.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/interceptor/RequestHeaderContextInterceptor.java @@ -91,9 +91,9 @@ public class RequestHeaderContextInterceptor implements HandlerInterceptor { String cacheRepeatKey = REPEAT_KEY + applicationName; log.info("repeatApi key: {}", cacheRepeatKey); - String key = RedisUtils.getCacheObject(cacheRepeatKey); - if (Objects.isNull(key)) { - RedisUtils.setCacheObject(cacheRepeatKey, "", Duration.ofSeconds(5)); + //success为true表示key不存在,执行成功,false表示key存在,执行失败 + Boolean success = RedisUtils.trySetObject(cacheRepeatKey, "", Duration.ofSeconds(5)); + if (success) { KEY_CACHE.set(cacheRepeatKey); insert(extAxProperty, applicationName, clientVersion, manageableStatus); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/util/RedisUtils.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/util/RedisUtils.java index 7ecef815f..fcb207f7a 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/util/RedisUtils.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/util/RedisUtils.java @@ -7,6 +7,7 @@ import org.redisson.api.RAtomicLong; import org.redisson.api.RBatch; import org.redisson.api.RBucket; import org.redisson.api.RBucketAsync; +import org.redisson.api.RFuture; import org.redisson.api.RKeys; import org.redisson.api.RList; import org.redisson.api.RMap; @@ -23,6 +24,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -140,6 +142,16 @@ public class RedisUtils { batch.execute(); } + + public static Boolean trySetObject(final String key, final T value, final Duration duration) { + RBatch batch = CLIENT.createBatch(); + RBucketAsync bucket = batch.getBucket(key); + RFuture future = bucket.trySetAsync(value, duration.toMillis(), TimeUnit.MILLISECONDS); + batch.execute(); + return future.join(); + } + + /** * 注册对象监听器 *