Bläddra i källkod

头条回传优化

wcc 9 månader sedan
förälder
incheckning
8c77a2cd13

+ 23 - 4
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtAppBackRpcImpl.java

@@ -19,6 +19,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 
 import java.time.LocalDateTime;
 import java.util.Collections;
@@ -46,6 +47,8 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
     @Autowired
     private IDistributedLockComponent distributedLockComponent;
     @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+    @Autowired
     private IGameOceanengineAppCallbackService gameOceanengineAppCallbackService;
 
     @Override
@@ -131,7 +134,8 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
         }
         // 此处加锁防止 cp 方调用过快,导致查询回传结果时判断逻辑没走完
         String lockKey = com.zanxiang.game.back.base.ServerInfo.SERVER_NAME + ":TtAppOrderBack:" + dto.getGameId() + ":" + dto.getOrderId();
-        distributedLockComponent.doLock(lockKey, 0L, 60L, TimeUnit.SECONDS);
+        redisTemplate.opsForValue().set(lockKey, dto.getOrderId(), 2L, TimeUnit.MINUTES);
+        // distributedLockComponent.doLock(lockKey, 0L, 60L, TimeUnit.SECONDS);
         try {
             GameOceanengineAppOrderLog orderLog = GameOceanengineAppOrderLog.builder()
                     .userId(dto.getUserId())
@@ -166,7 +170,8 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
             gameOceanengineAppOrderLogService.save(orderLog);
             return ResultVO.ok(gameOceanengineAppOrderLogService.callback(orderLog));
         } finally {
-            distributedLockComponent.unlock(lockKey);
+            redisTemplate.delete(lockKey);
+            // distributedLockComponent.unlock(lockKey);
         }
     }
 
@@ -229,9 +234,23 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
     public ResultVO<OrderBackQueryRpcVO> orderBackQuery(TtAppOrderBackQueryRpcDTO dto) {
         log.error("头条APP订单回传结果查询:{}", JsonUtil.toString(dto));
 
-        // 加锁最大等待 60s
         String lockKey = com.zanxiang.game.back.base.ServerInfo.SERVER_NAME + ":TtAppOrderBack:" + dto.getGameId() + ":" + dto.getOrderId();
-        distributedLockComponent.doLock(lockKey, 60, 1L, TimeUnit.SECONDS);
+        int maxCount = 0;
+        while (true) {
+            if (redisTemplate.opsForValue().get(lockKey) == null) {
+                break;
+            }
+            if (maxCount++ >= 120 / 10) {
+                break;
+            }
+            try {
+                Thread.sleep(10 * 1000L);
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+            }
+        }
+        // 加锁最大等待 120s
+        // distributedLockComponent.doLock(lockKey, 60, 1L, TimeUnit.SECONDS);
 
         GameOceanengineAppOrderLog orderLog = gameOceanengineAppOrderLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
                 .eq(GameOceanengineAppOrderLog::getOrderNo, dto.getOrderId())