From f84eaf7e230a5346d1e7f4e93e9e592dd35b597e Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Tue, 6 Jun 2023 17:22:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=201.5.0=201.=20=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E9=87=8D=E8=AF=95=E6=B7=BB=E5=8A=A0=E9=87=8D=E8=AF=95=E6=B5=81?= =?UTF-8?q?=E9=87=8F=E6=A0=87=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/core/cache/GroupVersionCache.java | 18 ++++++++++++++++++ .../client/core/intercepter/RetryAspect.java | 16 ++++++++++++++++ .../core/strategy/LocalRetryStrategies.java | 2 +- .../core/strategy/ManualRetryStrategies.java | 2 +- .../common/core/constant/SystemConstants.java | 5 +++++ .../common/core/model/EasyRetryHeaders.java | 3 ++- .../easy/retry/server/model/dto/ConfigDTO.java | 11 +++++++++++ .../persistence/support/ConfigAccess.java | 10 +++++++++- .../access/config/AbstractConfigAccess.java | 5 +++++ .../access/config/MybatisConfigAccess.java | 5 +++++ .../processor/ConfigAccessProcessor.java | 18 ++++++++++++++++++ .../model/request/GroupConfigRequestVO.java | 3 ++- 12 files changed, 93 insertions(+), 5 deletions(-) diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/cache/GroupVersionCache.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/cache/GroupVersionCache.java index e711fccb..a00d1bd8 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/cache/GroupVersionCache.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/cache/GroupVersionCache.java @@ -3,13 +3,16 @@ package com.aizuda.easy.retry.client.core.cache; import com.aizuda.easy.retry.client.core.Lifecycle; import com.aizuda.easy.retry.client.core.client.NettyClient; import com.aizuda.easy.retry.client.core.client.proxy.RequestBuilder; +import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.log.LogUtils; import com.aizuda.easy.retry.common.core.model.NettyResult; import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.server.model.dto.ConfigDTO; +import com.aizuda.easy.retry.server.model.dto.ConfigDTO.Scene; import lombok.extern.slf4j.Slf4j; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import java.util.HashSet; import java.util.List; @@ -34,6 +37,21 @@ public class GroupVersionCache implements Lifecycle { return configDTO.getVersion(); } + public static long getDdl(String sceneName) { + List sceneList = configDTO.getSceneList(); + if (CollectionUtils.isEmpty(sceneList)) { + return SystemConstants.DEFAULT_DDL; + } + + for (Scene scene : sceneList) { + if (scene.getSceneName().equals(sceneName)) { + return scene.getDdl(); + } + } + + return SystemConstants.DEFAULT_DDL; + } + public static Set getSceneBlacklist() { if (Objects.isNull(configDTO)) { return new HashSet<>(); 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 78f544c4..c4320517 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 @@ -1,5 +1,6 @@ package com.aizuda.easy.retry.client.core.intercepter; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.aizuda.easy.retry.client.core.cache.GroupVersionCache; import com.aizuda.easy.retry.client.core.config.EasyRetryProperties; @@ -11,10 +12,13 @@ import com.aizuda.easy.retry.client.core.retryer.RetryerResultContext; import com.aizuda.easy.retry.common.core.alarm.Alarm; import com.aizuda.easy.retry.common.core.alarm.AlarmContext; import com.aizuda.easy.retry.common.core.alarm.AltinAlarmFactory; +import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.enums.NotifySceneEnum; import com.aizuda.easy.retry.common.core.enums.RetryResultStatusEnum; 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.common.core.util.JsonUtil; import com.aizuda.easy.retry.server.model.dto.ConfigDTO; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; @@ -136,6 +140,9 @@ public class RetryAspect implements Ordered { try { + // 标识重试流量 + initHeaders(retryable); + RetryerResultContext context = retryStrategy.openRetry(retryable.scene(), executorClassName, point.getArgs()); LogUtils.info(log,"local retry result. traceId:[{}] message:[{}]", traceId, context); if (RetryResultStatusEnum.SUCCESS.getStatus().equals(context.getRetryResultStatusEnum().getStatus())) { @@ -156,6 +163,15 @@ public class RetryAspect implements Ordered { return null; } + private void initHeaders(final Retryable retryable) { + + EasyRetryHeaders easyRetryHeaders = new EasyRetryHeaders(); + easyRetryHeaders.setEasyRetry(Boolean.TRUE); + easyRetryHeaders.setEasyRetryId(IdUtil.getSnowflakeNextIdStr()); + easyRetryHeaders.setDdl(GroupVersionCache.getDdl(retryable.scene())); + RetrySiteSnapshot.setRetryHeader(easyRetryHeaders); + } + private void sendMessage(Exception e) { try { 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 563406b5..86e65894 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 @@ -148,7 +148,7 @@ public class LocalRetryStrategies extends AbstractRetryStrategies { return Collections.singletonList(new RetryListener() { @Override public void onRetry(Attempt attempt) { - LogUtils.error(log,"easy-retry 本地重试,第[{}]次调度", attempt.getAttemptNumber()); + LogUtils.info(log,"easy-retry 本地重试,第[{}]次调度", attempt.getAttemptNumber()); } }); } diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/ManualRetryStrategies.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/ManualRetryStrategies.java index 5147f9b3..1a4061ea 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/ManualRetryStrategies.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/ManualRetryStrategies.java @@ -116,7 +116,7 @@ public class ManualRetryStrategies extends AbstractRetryStrategies { @Override public void onRetry(Attempt attempt) { if (attempt.hasResult()) { - LogUtils.error(log, "easy-retry 手动创建重试数据成功,第[{}]次调度", attempt.getAttemptNumber()); + LogUtils.info(log, "easy-retry 手动创建重试数据成功,第[{}]次调度", attempt.getAttemptNumber()); } if (attempt.hasException()) { diff --git a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/constant/SystemConstants.java b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/constant/SystemConstants.java index 5b62dd1c..40a245b3 100644 --- a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/constant/SystemConstants.java +++ b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/constant/SystemConstants.java @@ -24,6 +24,11 @@ public interface SystemConstants { */ String EASY_RETRY_STATUS_CODE = "519"; + /** + * 默认的调用链超时时间 单位毫秒(ms) + */ + long DEFAULT_DDL = 60000L; + /** * 心跳 */ diff --git a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/model/EasyRetryHeaders.java b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/model/EasyRetryHeaders.java index ffb0f643..1fbeff50 100644 --- a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/model/EasyRetryHeaders.java +++ b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/model/EasyRetryHeaders.java @@ -1,5 +1,6 @@ package com.aizuda.easy.retry.common.core.model; +import com.aizuda.easy.retry.common.core.constant.SystemConstants; import lombok.Data; /** @@ -24,5 +25,5 @@ public class EasyRetryHeaders { /** * 调用链超时时间 单位毫秒(ms) */ - private long ddl = 60000; + private long ddl = SystemConstants.DEFAULT_DDL; } diff --git a/easy-retry-common/easy-retry-common-server-api/src/main/java/com/aizuda/easy/retry/server/model/dto/ConfigDTO.java b/easy-retry-common/easy-retry-common-server-api/src/main/java/com/aizuda/easy/retry/server/model/dto/ConfigDTO.java index 12d1d6ae..1a77483e 100644 --- a/easy-retry-common/easy-retry-common-server-api/src/main/java/com/aizuda/easy/retry/server/model/dto/ConfigDTO.java +++ b/easy-retry-common/easy-retry-common-server-api/src/main/java/com/aizuda/easy/retry/server/model/dto/ConfigDTO.java @@ -1,5 +1,6 @@ package com.aizuda.easy.retry.server.model.dto; +import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.enums.AlarmTypeEnum; import com.aizuda.easy.retry.common.core.enums.NotifySceneEnum; import lombok.Data; @@ -37,6 +38,16 @@ public class ConfigDTO { @Data public static class Scene { + + /** + * 场景名称 + */ + private String sceneName; + + /** + * 调用链超时时间 单位毫秒(ms) + */ + private long ddl = SystemConstants.DEFAULT_DDL; } @Data diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/ConfigAccess.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/ConfigAccess.java index ce7f3d92..4f8a9353 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/ConfigAccess.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/ConfigAccess.java @@ -53,10 +53,18 @@ public interface ConfigAccess { * 获取通知配置 * * @param groupName 组名称 - * @return {@link NotifyConfig} 场景配置 + * @return {@link NotifyConfig} 通知配置 */ List getNotifyListConfigByGroupName(String groupName); + /** + * 获取场景配置 + * + * @param groupName 组名称 + * @return {@link SceneConfig} 场景配置 + */ + List getSceneConfigByGroupName(String groupName); + /** * 获取已开启的组配置信息 * diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/access/config/AbstractConfigAccess.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/access/config/AbstractConfigAccess.java index 96be36af..8ddb7f09 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/access/config/AbstractConfigAccess.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/access/config/AbstractConfigAccess.java @@ -38,6 +38,11 @@ public abstract class AbstractConfigAccess implements ConfigAccess { .eq(SceneConfig::getGroupName, groupName).eq(SceneConfig::getSceneName, sceneName)); } + protected List getSceneConfigs(String groupName) { + return sceneConfigMapper.selectList(new LambdaQueryWrapper() + .eq(SceneConfig::getGroupName, groupName)); + } + protected GroupConfig getByGroupName(String groupName) { return groupConfigMapper.selectOne(new LambdaQueryWrapper().eq(GroupConfig::getGroupName, groupName)); } diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/access/config/MybatisConfigAccess.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/access/config/MybatisConfigAccess.java index 82f09136..c4b771ff 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/access/config/MybatisConfigAccess.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/access/config/MybatisConfigAccess.java @@ -48,6 +48,11 @@ public class MybatisConfigAccess extends AbstractConfigAccess { return getNotifyConfigs(shardingGroupId); } + @Override + public List getSceneConfigByGroupName(String groupName) { + return getSceneConfigs(groupName); + } + @Override public List getAllOpenGroupConfig() { return getAllConfigGroupList().stream().filter(i-> StatusEnum.YES.getStatus().equals(i.getGroupStatus())).collect(Collectors.toList()); diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/processor/ConfigAccessProcessor.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/processor/ConfigAccessProcessor.java index eee4af1e..df33c051 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/processor/ConfigAccessProcessor.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/support/processor/ConfigAccessProcessor.java @@ -1,6 +1,7 @@ package com.aizuda.easy.retry.server.persistence.support.processor; import com.aizuda.easy.retry.server.model.dto.ConfigDTO; +import com.aizuda.easy.retry.server.model.dto.ConfigDTO.Scene; import com.aizuda.easy.retry.server.persistence.mybatis.po.GroupConfig; import com.aizuda.easy.retry.server.persistence.mybatis.po.NotifyConfig; import com.aizuda.easy.retry.server.persistence.mybatis.po.SceneConfig; @@ -55,6 +56,11 @@ public class ConfigAccessProcessor implements ConfigAccess { return configAccess.getNotifyListConfigByGroupName(groupName); } + @Override + public List getSceneConfigByGroupName(final String groupName) { + return configAccess.getSceneConfigByGroupName(groupName); + } + @Override public List getAllOpenGroupConfig() { return configAccess.getAllOpenGroupConfig(); @@ -107,6 +113,18 @@ public class ConfigAccessProcessor implements ConfigAccess { } configDTO.setNotifyList(notifies); + + List sceneConfig = getSceneConfigByGroupName(groupName); + + List sceneList = new ArrayList<>(); + for (SceneConfig config : sceneConfig) { + Scene scene = new Scene(); + scene.setSceneName(config.getSceneName()); + scene.setDdl(config.getDeadlineRequest()); + sceneList.add(scene); + } + + configDTO.setSceneList(sceneList); return configDTO; } diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/GroupConfigRequestVO.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/GroupConfigRequestVO.java index 359aed4c..932005b9 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/GroupConfigRequestVO.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/GroupConfigRequestVO.java @@ -1,5 +1,6 @@ package com.aizuda.easy.retry.server.web.model.request; +import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.server.enums.IdGeneratorMode; import lombok.Data; import org.hibernate.validator.constraints.NotBlank; @@ -120,7 +121,7 @@ public class GroupConfigRequestVO { * Deadline Request 调用链超时 单位毫秒 * 默认值为 60*10*1000 */ - @Max(message = "最大60000毫秒", value = 60000) + @Max(message = "最大60000毫秒", value = SystemConstants.DEFAULT_DDL) @Min(message = "最小100ms", value = 100) private Long deadlineRequest;