From a9058d8ca600b480f07fd8ddc0f37124a75e9e02 Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Fri, 25 Aug 2023 15:34:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=202.2.0=201.=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BF=A1=E6=81=AF=202.=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=BF=9C=E7=A8=8B=E9=87=8D=E8=AF=95=E8=BF=94=E5=9B=9E=E5=80=BC?= =?UTF-8?q?=E4=B8=BA=E5=9F=BA=E6=9C=AC=E7=B1=BB=E5=9E=8B=E6=97=B6=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/core/intercepter/RetryAspect.java | 8 ++++++++ .../retry/client/core/report/ReportListener.java | 2 +- .../retry/client/core/retryer/RetryType.java | 5 +++-- .../core/strategy/LocalRetryStrategies.java | 16 ++++++++++++---- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetryAspect.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetryAspect.java index 8550816e7..c288503ba 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetryAspect.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetryAspect.java @@ -20,6 +20,7 @@ import com.aizuda.easy.retry.common.core.log.LogUtils; import com.aizuda.easy.retry.common.core.model.EasyRetryHeaders; import com.aizuda.easy.retry.common.core.util.EnvironmentUtils; import com.aizuda.easy.retry.server.model.dto.ConfigDTO; +import com.google.common.base.Defaults; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; @@ -97,6 +98,13 @@ public class RetryAspect implements Ordered { // 重试成功直接返回结果 若注解配置了isThrowException=false 则不抛出异常 if (retryerResultContext.getRetryResultStatusEnum().getStatus().equals(RetryResultStatusEnum.SUCCESS.getStatus()) || !retryable.isThrowException()) { + + // 若返回值是NULL且是基本类型则返回默认值 + MethodSignature signature = (MethodSignature) point.getSignature(); + if (Objects.isNull(retryerResultContext.getResult()) && signature.getReturnType().isPrimitive()) { + return Defaults.defaultValue(signature.getReturnType()); + } + return retryerResultContext.getResult(); } } diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/ReportListener.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/ReportListener.java index c72f0031e..25de4939f 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/ReportListener.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/ReportListener.java @@ -92,7 +92,7 @@ public class ReportListener implements Listener { public void onRetry(Attempt attempt) { if (attempt.hasException()) { - LogUtils.error(log,"easy-retry 上报服务端失败,第[{}]次尝试上报 ", attempt.getAttemptNumber(), attempt.getExceptionCause()); + LogUtils.error(log,"EasyRetry上报异常数据时接口发生异常,第[{}]次尝试上报 ", attempt.getAttemptNumber(), attempt.getExceptionCause()); } } diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/retryer/RetryType.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/retryer/RetryType.java index 401c7641a..2b964622a 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/retryer/RetryType.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/retryer/RetryType.java @@ -7,17 +7,18 @@ package com.aizuda.easy.retry.client.core.retryer; public enum RetryType { /** - * 本地重试 + * 本地重试: 发生异常时通过内存进行重试 */ ONLY_LOCAL, /** - * 远程重试 + * 远程重试: 发生异常时将数据上报到服务端进行重试 */ ONLY_REMOTE, /** * 先本地重试,在远程重试 + * 即:现在本地进行内存重试N次,如果本地重试未解决,将异常数据上报到服务端进行重试 */ LOCAL_REMOTE } diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/LocalRetryStrategies.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/LocalRetryStrategies.java index ce7fb2b72..0b991b3ac 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/LocalRetryStrategies.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/LocalRetryStrategies.java @@ -53,7 +53,15 @@ public class LocalRetryStrategies extends AbstractRetryStrategies { @Override protected Consumer doRetrySuccessConsumer(RetryerResultContext context) { return o -> { - LogUtils.debug(log, "doRetrySuccessConsumer 重试成功"); + + RetryerInfo retryerInfo = context.getRetryerInfo(); + if (retryerInfo.getRetryType() == RetryType.ONLY_REMOTE) { + // 若是远程重试模式,采用直接上报服务端 + // 这里标志结果为失败,是表示数据并未重试成功,等待服务端重试 + context.setRetryResultStatusEnum(RetryResultStatusEnum.FAILURE); + } else { + LogUtils.debug(log, "doRetrySuccessConsumer 重试成功"); + } }; } @@ -157,7 +165,7 @@ public class LocalRetryStrategies extends AbstractRetryStrategies { LogUtils.error(log,"[{}] 执行本地重试失败,第[{}]次重试", retryerInfo.getScene(), attempt.getAttemptNumber()); break; case ONLY_REMOTE: - LogUtils.error(log,"[{}] 执行远程重试失败,第[{}]次重试", retryerInfo.getScene(), attempt.getAttemptNumber()); + LogUtils.error(log,"[{}] 执行上报服务端失败,第[{}]次重试", retryerInfo.getScene(), attempt.getAttemptNumber()); break; default: throw new EasyRetryClientException("异常重试模式 [{}]", retryType.name()); @@ -168,10 +176,10 @@ public class LocalRetryStrategies extends AbstractRetryStrategies { switch (retryType) { case ONLY_LOCAL: case LOCAL_REMOTE: - LogUtils.info(log,"[{}] 执行本地重试成功.", retryerInfo.getScene(), attempt.getAttemptNumber()); + LogUtils.info(log,"[{}] 执行本地重试成功.", retryerInfo.getScene()); break; case ONLY_REMOTE: - LogUtils.info(log,"[{}] 执行远程成功.", retryerInfo.getScene(), attempt.getAttemptNumber()); + LogUtils.info(log,"[{}] 执行上报服务端成功.", retryerInfo.getScene()); break; default: throw new EasyRetryClientException("异常重试模式 [{}]", retryType.name());