From 3559971a8d992957f1e0161c19a62a6675d78a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=93=89=E6=B8=85?= <13698617+xuanqings@user.noreply.gitee.com> Date: Sat, 21 Sep 2024 16:17:53 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20web-=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E7=A0=81=E7=99=BB=E5=BD=95=20=E4=BC=98=E5=8C=96=E7=9D=A1?= =?UTF-8?q?=E7=9C=A0=E6=97=B6=E9=97=B4=E4=BD=BF=E7=94=A8=E6=8C=87=E6=95=B0?= =?UTF-8?q?=E9=80=80=E9=81=BF=E7=AD=96=E7=95=A5=E6=9D=A5=E5=BB=B6=E9=95=BF?= =?UTF-8?q?=E6=AF=8F=E6=AC=A1=E8=BD=AE=E8=AF=A2=E7=9A=84=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E9=97=B4=E9=9A=94=EF=BC=8C=E5=87=8F=E5=B0=91CPU=E5=8D=A0?= =?UTF-8?q?=E7=94=A8=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 铉清 <13698617+xuanqings@user.noreply.gitee.com> --- .../passport/MemberBuyerController.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java index 9b24c174..ab7dd42c 100644 --- a/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java @@ -29,7 +29,7 @@ import org.springframework.web.context.request.async.DeferredResult; import javax.validation.constraints.NotNull; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; - +import java.util.concurrent.atomic.AtomicInteger; /** * 买家端,会员接口 @@ -73,6 +73,8 @@ public class MemberBuyerController { new ResponseEntity<>(ResultUtil.error(ResultCode.ERROR), HttpStatus.OK); int timeoutSecond = 20; DeferredResult> deferredResult = new DeferredResult<>(timeoutSecond * 1000L, timeoutResponseEntity); + // 用于记录重试次数 + AtomicInteger retryCount = new AtomicInteger(0); CompletableFuture.runAsync(() -> { try { int i = 0; @@ -83,7 +85,16 @@ public class MemberBuyerController { && (QRCodeLoginSessionStatusEnum.WAIT_SCANNING.getCode() == status || QRCodeLoginSessionStatusEnum.SCANNING.getCode() == status)) { //睡眠一秒种,继续等待结果 - TimeUnit.SECONDS.sleep(1); + //TimeUnit.SECONDS.sleep(1); + + // 应用指数退避策略 + int baseSleepTime = 1000; // 基础退避时间(毫秒) + int maxSleepTime = 10000; // 最大退避时间(毫秒) + + int sleepTime = Math.min(maxSleepTime, baseSleepTime * (1 + retryCount.getAndIncrement())); + int randomFactor = (int) (Math.random() * (sleepTime / 2)); // 随机化因子 + + TimeUnit.MILLISECONDS.sleep(sleepTime + randomFactor); } else { deferredResult.setResult(new ResponseEntity<>(ResultUtil.data(queryResult), HttpStatus.OK)); break;