15902849627 2 лет назад
Родитель
Сommit
54fe0d9891

+ 14 - 4
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/utils/RedissonUtils.java

@@ -214,13 +214,23 @@ public class RedissonUtils {
     }
     }
 
 
     /**
     /**
-     * 暴露redisson的Lock对象
+     * 尝试加锁,最多等待waitTime秒,上锁以后leaseTime秒自动解锁
      *
      *
-     * @param key
+     * @param lockKey
+     * @param waitTime
+     * @param leaseTime
      * @return
      * @return
      */
      */
-    public static RLock getRedisLock(String key) {
-        return redissonUtils.redissonClient.getLock(key);
+    public static boolean tryLock(String lockKey, long waitTime, long leaseTime) {
+        RLock lock = redissonUtils.redissonClient.getLock(lockKey);
+        try {
+            return lock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS);
+        } catch (InterruptedException e) {
+            log.info("tryLock lockKey:{} waitTime:{} leaseTime:{}", lockKey, waitTime, leaseTime);
+            return false;
+        } finally {
+            lock.unlock();
+        }
     }
     }
 
 
 }
 }

+ 7 - 4
sckw-modules/sckw-message/src/main/java/com/sckw/message/consumer/SckwSmsConsumer.java

@@ -1,9 +1,8 @@
 package com.sckw.message.consumer;
 package com.sckw.message.consumer;
 
 
-import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson.JSON;
 import com.sckw.message.service.SckwSmsHandlerService;
 import com.sckw.message.service.SckwSmsHandlerService;
 import com.sckw.stream.model.SckwSms;
 import com.sckw.stream.model.SckwSms;
-import com.sckw.stream.utils.SmsUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
@@ -13,8 +12,8 @@ import java.util.function.Consumer;
 
 
 
 
 @Component
 @Component
-@Slf4j
 @RequiredArgsConstructor
 @RequiredArgsConstructor
+@Slf4j
 public class SckwSmsConsumer {
 public class SckwSmsConsumer {
 
 
     private final SckwSmsHandlerService sckwSmsHandlerService;
     private final SckwSmsHandlerService sckwSmsHandlerService;
@@ -22,7 +21,11 @@ public class SckwSmsConsumer {
     @Bean
     @Bean
     public Consumer<SckwSms> sckwSms() {
     public Consumer<SckwSms> sckwSms() {
         return sckwSms -> {
         return sckwSms -> {
-            sckwSmsHandlerService.handler(sckwSms);
+            try {
+                sckwSmsHandlerService.handler(sckwSms);
+            } catch (Exception e) {
+                log.error("处理发送短信消息:{}异常", JSON.toJSONString(sckwSms), e);
+            }
         };
         };
     }
     }
 
 

+ 4 - 1
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwSmsHandlerService.java

@@ -25,8 +25,11 @@ public class SckwSmsHandlerService {
     private static final String MESSAGE_SMS_VERIFY_CODE_KEY = "sckw:message:sms:verifyCode:%s";
     private static final String MESSAGE_SMS_VERIFY_CODE_KEY = "sckw:message:sms:verifyCode:%s";
 
 
     public void handler(SckwSms sckwSms) {
     public void handler(SckwSms sckwSms) {
+        log.info("接收到发送短信消息:{},开始处理", JSON.toJSONString(sckwSms));
         String key = getMessageSmsVerifyCodeKey(sckwSms.getTelephone());
         String key = getMessageSmsVerifyCodeKey(sckwSms.getTelephone());
-        if (RedissonUtils.exists(key)){
+        Long effectiveTime = sckwSms.getEffectiveTime();
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(key, 10L, effectiveTime))){
+            log.info("重复发送短信消息,不处理");
             return;
             return;
         }
         }
         //发送短信
         //发送短信