From 28e4fa9769c2aad112c48726eb73a51d9ba59f11 Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Sun, 4 Feb 2024 18:53:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=203.1.0=201.=20=20=E9=87=8D=E8=AF=95?= =?UTF-8?q?=E5=B9=B6=E8=A1=8C=E6=89=A7=E8=A1=8C=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/intercepter/RetrySiteSnapshot.java | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetrySiteSnapshot.java b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetrySiteSnapshot.java index 1ce2cd10..40408d09 100644 --- a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetrySiteSnapshot.java +++ b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetrySiteSnapshot.java @@ -8,8 +8,11 @@ import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.model.EasyRetryHeaders; import lombok.Getter; +import java.util.Deque; import java.util.Objects; import java.util.Optional; +import java.util.Stack; +import java.util.concurrent.LinkedBlockingDeque; /** * 重试现场记录器 @@ -27,7 +30,7 @@ public class RetrySiteSnapshot { /** * 标记重试方法入口 */ - private static final RetrySiteSnapshotContext RETRY_CLASS_METHOD_ENTRANCE = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(); + private static final RetrySiteSnapshotContext> RETRY_CLASS_METHOD_ENTRANCE = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(); /** * 重试状态 @@ -37,18 +40,18 @@ public class RetrySiteSnapshot { /** * 重试请求头 */ - private static final RetrySiteSnapshotContext RETRY_HEADER = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(); + private static final RetrySiteSnapshotContext RETRY_HEADER = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(); /** * 状态码 */ - private static final RetrySiteSnapshotContext RETRY_STATUS_CODE = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(); + private static final RetrySiteSnapshotContext RETRY_STATUS_CODE = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(); /** * 进入方法入口时间标记 */ - private static final RetrySiteSnapshotContext ENTRY_METHOD_TIME = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(); - private static final RetrySiteSnapshotContext ATTEMPT_NUMBER = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(); + private static final RetrySiteSnapshotContext ENTRY_METHOD_TIME = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(); + private static final RetrySiteSnapshotContext ATTEMPT_NUMBER = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(); public static Integer getAttemptNumber() { return ATTEMPT_NUMBER.get(); @@ -71,15 +74,32 @@ public class RetrySiteSnapshot { } public static String getMethodEntrance() { - return RETRY_CLASS_METHOD_ENTRANCE.get(); + Deque stack = RETRY_CLASS_METHOD_ENTRANCE.get(); + return stack.peek(); } public static void setMethodEntrance(String methodEntrance) { - RETRY_CLASS_METHOD_ENTRANCE.set(methodEntrance); + Deque stack = RETRY_CLASS_METHOD_ENTRANCE.get(); + if (Objects.isNull(RETRY_CLASS_METHOD_ENTRANCE.get())) { + stack = new LinkedBlockingDeque<>(); + } + + stack.push(methodEntrance); + RETRY_CLASS_METHOD_ENTRANCE.set(stack); } public static void removeMethodEntrance() { - RETRY_CLASS_METHOD_ENTRANCE.remove(); + Deque stack = RETRY_CLASS_METHOD_ENTRANCE.get(); + if (Objects.isNull(stack)) { + return; + } + + if (stack.isEmpty()) { + RETRY_CLASS_METHOD_ENTRANCE.remove(); + return; + } + + stack.pop(); } public static boolean isMethodEntrance(String methodEntrance) {