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