瀏覽代碼

网络教室

zouxuan 3 年之前
父節點
當前提交
ddba67834b

+ 13 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java

@@ -16,6 +16,8 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.utils.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RBucket;
+import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -190,9 +192,17 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
         log.info("quitRoomSuccess: roomId={}, userId={}", roomId, userId);
         //防止幂等
         StringBuffer sb  = new StringBuffer(QUIT_ROOM_SUCCESS).append(roomId).append(userId);
-        if (!redissonClient.getBucket(sb.toString()).setIfExists(userId,1, TimeUnit.SECONDS)){
-            log.info("quitRoomSuccess break: roomId={}, userId={}", roomId, userId);
-            return;
+        RLock lock = redissonClient.getLock(sb.toString());
+        try {
+            lock.tryLock(2,TimeUnit.SECONDS);
+            RBucket<Long> bucket = redissonClient.getBucket(sb.toString());
+            if (redissonClient.getBucket(sb.toString()).isExists()){
+                log.info("quitRoomSuccess break: roomId={}, userId={}", roomId, userId);
+                return;
+            }
+            bucket.set(userId,1, TimeUnit.SECONDS);
+        }finally {
+            lock.unlock();
         }
         ImNetworkRoomMember roomMember = imNetworkRoomMemberService.getDao().findByRidAndUid(roomId, userId);
         if(Objects.isNull(roomMember)){