|
@@ -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)){
|