diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/integration/shangyou/ShangyouCallbackQueueWorker.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/integration/shangyou/ShangyouCallbackQueueWorker.java index f10cef582..fb9aa3d0b 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/integration/shangyou/ShangyouCallbackQueueWorker.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/integration/shangyou/ShangyouCallbackQueueWorker.java @@ -10,7 +10,7 @@ import org.springframework.boot.ApplicationRunner; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; -import java.time.Duration; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -65,15 +65,18 @@ public class ShangyouCallbackQueueWorker implements ApplicationRunner { while (running.get()) { try { // BRPOP 多 key:先高优(订单状态)再普通;阻塞期间新到的高优也会被优先弹出 - List popped = redisTemplate.opsForList().rightPop( - List.of(ShangyouHotelApi.REDIS_CALLBACK_QUEUE_HIGH, - ShangyouHotelApi.REDIS_CALLBACK_QUEUE), - Duration.ofSeconds(5)); - if (popped == null || popped.size() < 2 || popped.get(1) == null) { - continue; + // ListOperations 没有多 key 阻塞弹出,走底层连接命令 bRPop(秒, keys...),返回 [key, value] + String taskId = redisTemplate.execute(connection -> { + List popped = connection.listCommands().bRPop(5, + ShangyouHotelApi.REDIS_CALLBACK_QUEUE_HIGH.getBytes(StandardCharsets.UTF_8), + ShangyouHotelApi.REDIS_CALLBACK_QUEUE.getBytes(StandardCharsets.UTF_8)); + return popped == null || popped.size() < 2 ? null + : new String(popped.get(1), StandardCharsets.UTF_8); + }); + if (taskId != null) { + taskId = taskId.trim(); } - String taskId = popped.get(1).trim(); - if (taskId.isBlank() || "null".equalsIgnoreCase(taskId)) { + if (taskId == null || taskId.isBlank() || "null".equalsIgnoreCase(taskId)) { continue; } Long id;