From 1ad33bff6c357aee6e77eef1c4e85063a4651d8a Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Mon, 28 Aug 2023 16:56:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=202.2.0=201.=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=E6=A8=A1=E6=9D=BF=202.=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=A2=E6=88=B7=E7=AB=AF=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/intercepter/RetrySiteSnapshot.java | 6 +- .../core/loader/EasyRetrySpiLoader.java | 11 +--- .../strategy/AbstractRetryStrategies.java | 6 +- .../core/strategy/LocalRetryStrategies.java | 8 +-- .../datasource/access/AccessTemplate.java | 64 ++++++++----------- .../access/config/AbstractConfigAccess.java | 2 +- 6 files changed, 39 insertions(+), 58 deletions(-) diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetrySiteSnapshot.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetrySiteSnapshot.java index 593492eb..742043a6 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetrySiteSnapshot.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/RetrySiteSnapshot.java @@ -9,6 +9,7 @@ import com.aizuda.easy.retry.common.core.model.EasyRetryHeaders; import lombok.Getter; import java.util.Objects; +import java.util.Optional; /** * 重试现场记录器 @@ -31,7 +32,7 @@ public class RetrySiteSnapshot { /** * 重试状态 */ - private static final RetrySiteSnapshotContext RETRY_STATUS = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(new ThreadLockRetrySiteSnapshotContext<>(ThreadLocal.withInitial(EnumStatus.COMPLETE::getStatus))); + private static final RetrySiteSnapshotContext RETRY_STATUS = EasyRetrySpiLoader.loadRetrySiteSnapshotContext(); /** * 重试请求头 @@ -77,7 +78,8 @@ public class RetrySiteSnapshot { } public static Integer getStatus() { - return RETRY_STATUS.get(); + return Optional.ofNullable(RETRY_STATUS.get()).orElse(EnumStatus.COMPLETE.status); + } public static void setStatus(Integer status) { diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/loader/EasyRetrySpiLoader.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/loader/EasyRetrySpiLoader.java index c0a5be47..25dd5d90 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/loader/EasyRetrySpiLoader.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/loader/EasyRetrySpiLoader.java @@ -52,16 +52,7 @@ public class EasyRetrySpiLoader { /** * 加载重试现场记录上下文SPI类 * - * @return {@link SimpleEasyRetryListener} 默认序列化类为SimpleEasyRetryListener - */ - public static RetrySiteSnapshotContext loadRetrySiteSnapshotContext(RetrySiteSnapshotContext context) { - return Optional.ofNullable(ServiceLoaderUtil.loadFirst(RetrySiteSnapshotContext.class)).orElse(context); - } - - /** - * 加载重试现场记录上下文SPI类 - * - * @return {@link SimpleEasyRetryListener} 默认序列化类为SimpleEasyRetryListener + * @return {@link RetrySiteSnapshotContext} 默认序列化类为ThreadLockRetrySiteSnapshotContext */ public static RetrySiteSnapshotContext loadRetrySiteSnapshotContext() { return Optional.ofNullable(ServiceLoaderUtil.loadFirst(RetrySiteSnapshotContext.class)).orElse(new ThreadLockRetrySiteSnapshotContext(new ThreadLocal<>())); diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java index 832e9afb..66b892eb 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java @@ -7,6 +7,7 @@ import com.aizuda.easy.retry.client.core.config.EasyRetryProperties; import com.aizuda.easy.retry.client.core.event.EasyRetryListener; import com.aizuda.easy.retry.client.core.intercepter.RetrySiteSnapshot; import com.aizuda.easy.retry.client.core.Report; +import com.aizuda.easy.retry.client.core.intercepter.RetrySiteSnapshot.EnumStatus; import com.aizuda.easy.retry.client.core.loader.EasyRetrySpiLoader; import com.aizuda.easy.retry.common.core.alarm.Alarm; import com.aizuda.easy.retry.common.core.alarm.AlarmContext; @@ -90,6 +91,9 @@ public abstract class AbstractRetryStrategies implements RetryStrategy { // 预警 sendMessage(e); + } finally { + // 重试调度完成 + RetrySiteSnapshot.setStatus(EnumStatus.COMPLETE.getStatus()); } return retryerResultContext; @@ -132,8 +136,6 @@ public abstract class AbstractRetryStrategies implements RetryStrategy { } catch (Exception e) { log.error("失败监听者模式 处理失败 ", e); throw e; - } finally { - RetrySiteSnapshot.setStatus(RetrySiteSnapshot.EnumStatus.COMPLETE.getStatus()); } doGetRetryErrorConsumer(retryerInfo, params).accept(throwable); 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 0b991b3a..64b6186e 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 @@ -162,10 +162,10 @@ public class LocalRetryStrategies extends AbstractRetryStrategies { switch (retryType) { case ONLY_LOCAL: case LOCAL_REMOTE: - LogUtils.error(log,"[{}] 执行本地重试失败,第[{}]次重试", retryerInfo.getScene(), attempt.getAttemptNumber()); + 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()); @@ -176,10 +176,10 @@ public class LocalRetryStrategies extends AbstractRetryStrategies { switch (retryType) { case ONLY_LOCAL: case LOCAL_REMOTE: - LogUtils.info(log,"[{}] 执行本地重试成功.", retryerInfo.getScene()); + LogUtils.info(log,"[{}] 本地重试执行成功.", retryerInfo.getScene()); break; case ONLY_REMOTE: - LogUtils.info(log,"[{}] 执行上报服务端成功.", retryerInfo.getScene()); + LogUtils.info(log,"[{}] 上报服务端执行成功.", retryerInfo.getScene()); break; default: throw new EasyRetryClientException("异常重试模式 [{}]", retryType.name()); diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/AccessTemplate.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/AccessTemplate.java index 81c8a015..65eb314e 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/AccessTemplate.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/AccessTemplate.java @@ -8,10 +8,12 @@ import com.aizuda.easy.retry.template.datasource.access.task.RetryTaskAccess; import com.aizuda.easy.retry.template.datasource.enums.OperationTypeEnum; import com.aizuda.easy.retry.template.datasource.exception.EasyRetryDatasourceException; import com.aizuda.easy.retry.template.datasource.persistence.po.*; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Optional; /** * 数据处理模板类 @@ -22,9 +24,18 @@ import java.util.List; */ @Component public class AccessTemplate { + protected Map REGISTER_ACCESS = new HashMap<>(); + public AccessTemplate(List accesses) { - @Autowired - private List accesses; + for (Access access : accesses) { + for (final OperationTypeEnum typeEnum : OperationTypeEnum.values()) { + if (access.supports(typeEnum.name())) { + REGISTER_ACCESS.put(typeEnum.name(), access); + break; + } + } + } + } /** * 获取重试任务操作类 @@ -32,14 +43,8 @@ public class AccessTemplate { * @return {@link RetryTaskAccess} 重试任务操作类 */ public TaskAccess getRetryTaskAccess() { - - for (Access access : accesses) { - if (access.supports(OperationTypeEnum.RETRY_TASK.name())) { - return (TaskAccess) access; - } - } - - throw new EasyRetryDatasourceException("not supports operation type"); + return (TaskAccess) Optional.ofNullable(REGISTER_ACCESS.get(OperationTypeEnum.RETRY_TASK.name())) + .orElseThrow(() -> new EasyRetryDatasourceException("not supports operation type")); } /** @@ -48,14 +53,10 @@ public class AccessTemplate { * @return {@link RetryDeadLetterTaskAccess} 获取死信任务操作类 */ public TaskAccess getRetryDeadLetterAccess() { + return (TaskAccess) Optional.ofNullable( + REGISTER_ACCESS.get(OperationTypeEnum.RETRY_DEAD_LETTER.name())) + .orElseThrow(() -> new EasyRetryDatasourceException("not supports operation type")); - for (Access access : accesses) { - if (access.supports(OperationTypeEnum.RETRY_DEAD_LETTER.name())) { - return (TaskAccess) access; - } - } - - throw new EasyRetryDatasourceException("not supports operation type"); } /** @@ -64,14 +65,9 @@ public class AccessTemplate { * @return {@link SceneConfigAccess} 获取场景配置操作类 */ public ConfigAccess getSceneConfigAccess() { + return (ConfigAccess) Optional.ofNullable(REGISTER_ACCESS.get(OperationTypeEnum.SCENE.name())) + .orElseThrow(() -> new EasyRetryDatasourceException("not supports operation type")); - for (Access access : accesses) { - if (access.supports(OperationTypeEnum.SCENE.name())) { - return (ConfigAccess) access; - } - } - - throw new EasyRetryDatasourceException("not supports operation type"); } /** @@ -80,14 +76,9 @@ public class AccessTemplate { * @return {@link GroupConfigAccess} 获取组配置操作类 */ public ConfigAccess getGroupConfigAccess() { + return (ConfigAccess) Optional.ofNullable(REGISTER_ACCESS.get(OperationTypeEnum.GROUP.name())) + .orElseThrow(() -> new EasyRetryDatasourceException("not supports operation type")); - for (Access access : accesses) { - if (access.supports(OperationTypeEnum.GROUP.name())) { - return (ConfigAccess) access; - } - } - - throw new EasyRetryDatasourceException("not supports operation type"); } /** @@ -96,14 +87,9 @@ public class AccessTemplate { * @return {@link NotifyConfigAccess} 获取通知配置操作类 */ public ConfigAccess getNotifyConfigAccess() { + return (ConfigAccess) Optional.ofNullable(REGISTER_ACCESS.get(OperationTypeEnum.NOTIFY.name())) + .orElseThrow(() -> new EasyRetryDatasourceException("not supports operation type")); - for (Access access : accesses) { - if (access.supports(OperationTypeEnum.GROUP.name())) { - return (ConfigAccess) access; - } - } - - throw new EasyRetryDatasourceException("not supports operation type"); } } diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/config/AbstractConfigAccess.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/config/AbstractConfigAccess.java index f0c9080d..11d586ef 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/config/AbstractConfigAccess.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/config/AbstractConfigAccess.java @@ -36,7 +36,7 @@ public abstract class AbstractConfigAccess implements ConfigAccess { protected GroupConfigMapper groupConfigMapper; @Autowired protected Environment environment; - protected static final List ALLOW_DB = Arrays.asList(DbTypeEnum.MYSQL.getDb(), + protected static final List ALLOW_DB = Arrays.asList(DbTypeEnum.MYSQL.getDb(), DbTypeEnum.MARIADB.getDb(), DbTypeEnum.POSTGRES.getDb());