From 1d0e792eb00a7170ec558bf65d57cd921dcb188f Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Wed, 31 May 2023 10:16:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=201.4.0=201.=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E5=9C=BA=E6=99=AF=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/sql/easy_retry.sql | 1 + .../client/core/annotation/Retryable.java | 1 + .../common/core/enums/DelayLevelEnum.java | 3 +- .../persistence/mybatis/po/GroupConfig.java | 2 + .../server/service/impl/RetryServiceImpl.java | 42 +++++++++++++++++-- .../support/strategy/WaitStrategies.java | 2 + .../model/request/GroupConfigRequestVO.java | 5 +++ .../model/response/GroupConfigResponseVO.java | 2 + .../resources/mapper/GroupConfigMapper.xml | 3 +- .../example/demo/RetryRegisterService.java | 1 - frontend/src/views/config/GroupList.vue | 10 ++++- .../config/basicConfigForm/GroupForm.vue | 21 +++++++++- 12 files changed, 83 insertions(+), 10 deletions(-) diff --git a/doc/sql/easy_retry.sql b/doc/sql/easy_retry.sql index 0267ad20..7dc07928 100644 --- a/doc/sql/easy_retry.sql +++ b/doc/sql/easy_retry.sql @@ -8,6 +8,7 @@ CREATE TABLE `group_config` `group_partition` int(11) NOT NULL COMMENT '分区', `route_key` tinyint(4) NOT NULL COMMENT '路由策略', `id_generator_mode` tinyint(4) NOT NULL DEFAULT '1' COMMENT '唯一id生成模式 默认号段模式', + `init_scene` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否初始化场景 0:否 1:是', `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/annotation/Retryable.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/annotation/Retryable.java index b8ed0a01..a118bb69 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/annotation/Retryable.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/annotation/Retryable.java @@ -123,5 +123,6 @@ public @interface Retryable { */ TimeUnit unit() default TimeUnit.MILLISECONDS; + } diff --git a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/DelayLevelEnum.java b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/DelayLevelEnum.java index 5987cce0..4b81ec1f 100644 --- a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/DelayLevelEnum.java +++ b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/DelayLevelEnum.java @@ -77,7 +77,8 @@ public enum DelayLevelEnum { } } - throw new EasyRetryCommonException("level:[{}] 不存在", level); + // 若配置的不存在默认1个小时一次 + return DelayLevelEnum._15; } } diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/mybatis/po/GroupConfig.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/mybatis/po/GroupConfig.java index debc43bc..60773734 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/mybatis/po/GroupConfig.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/persistence/mybatis/po/GroupConfig.java @@ -25,6 +25,8 @@ public class GroupConfig implements Serializable { private Integer version; + private Integer initScene; + private String description; private LocalDateTime createDt; diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/RetryServiceImpl.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/RetryServiceImpl.java index ddecc2f0..76971df8 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/RetryServiceImpl.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/RetryServiceImpl.java @@ -1,11 +1,13 @@ package com.aizuda.easy.retry.server.service.impl; import cn.hutool.core.lang.Assert; +import com.aizuda.easy.retry.common.core.enums.StatusEnum; import com.aizuda.easy.retry.common.core.log.LogUtils; import com.aizuda.easy.retry.server.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.model.dto.RetryTaskDTO; import com.aizuda.easy.retry.server.persistence.mybatis.mapper.RetryDeadLetterMapper; import com.aizuda.easy.retry.server.persistence.mybatis.mapper.RetryTaskMapper; +import com.aizuda.easy.retry.server.persistence.mybatis.mapper.SceneConfigMapper; import com.aizuda.easy.retry.server.persistence.mybatis.po.GroupConfig; import com.aizuda.easy.retry.server.persistence.mybatis.po.RetryDeadLetter; import com.aizuda.easy.retry.server.persistence.mybatis.po.RetryTask; @@ -14,6 +16,7 @@ import com.aizuda.easy.retry.server.persistence.support.ConfigAccess; import com.aizuda.easy.retry.server.persistence.support.RetryTaskAccess; import com.aizuda.easy.retry.server.support.generator.IdGenerator; import com.aizuda.easy.retry.server.support.strategy.WaitStrategies; +import com.aizuda.easy.retry.server.support.strategy.WaitStrategies.WaitStrategyEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.aizuda.easy.retry.common.core.enums.RetryStatusEnum; import com.aizuda.easy.retry.server.config.RequestDataHelper; @@ -49,18 +52,18 @@ public class RetryServiceImpl implements RetryService { @Autowired @Qualifier("retryTaskAccessProcessor") private RetryTaskAccess retryTaskAccess; - @Autowired @Qualifier("configAccessProcessor") private ConfigAccess configAccess; - @Autowired private List idGeneratorList; - @Autowired private RetryTaskMapper retryTaskMapper; @Autowired private RetryDeadLetterMapper retryDeadLetterMapper; + @Autowired + private SceneConfigMapper sceneConfigMapper; + @Transactional @Override @@ -69,7 +72,18 @@ public class RetryServiceImpl implements RetryService { SceneConfig sceneConfig = configAccess.getSceneConfigByGroupNameAndSceneName(retryTaskDTO.getGroupName(), retryTaskDTO.getSceneName()); if (Objects.isNull(sceneConfig)) { - throw new EasyRetryServerException("failed to report data, no scene configuration found. groupName:[{}] sceneName:[{}]", retryTaskDTO.getGroupName(), retryTaskDTO.getSceneName()); + + GroupConfig groupConfig = configAccess.getGroupConfigByGroupName(retryTaskDTO.getGroupName()); + if (Objects.isNull(groupConfig)) { + throw new EasyRetryServerException("failed to report data, no group configuration found. groupName:[{}]", retryTaskDTO.getGroupName()); + } + + if (groupConfig.getInitScene().equals(StatusEnum.NO.getStatus())) { + throw new EasyRetryServerException("failed to report data, no scene configuration found. groupName:[{}] sceneName:[{}]", retryTaskDTO.getGroupName(), retryTaskDTO.getSceneName()); + } else { + // 若配置了默认初始化场景配置,则发现上报数据的时候未配置场景,默认生成一个场景 + initScene(retryTaskDTO); + } } RequestDataHelper.setPartition(retryTaskDTO.getGroupName()); @@ -100,6 +114,26 @@ public class RetryServiceImpl implements RetryService { return Boolean.TRUE; } + /** + * 若配置了默认初始化场景配置,则发现上报数据的时候未配置场景,默认生成一个场景 + * backOff(退避策略): 等级策略 + * maxRetryCount(最大重试次数): 26 + * triggerInterval(间隔时间): see: {@link com.aizuda.easy.retry.common.core.enums.DelayLevelEnum} + * + * @param retryTaskDTO 重试上报DTO + */ + private void initScene(final RetryTaskDTO retryTaskDTO) { + SceneConfig sceneConfig; + sceneConfig = new SceneConfig(); + sceneConfig.setGroupName(retryTaskDTO.getGroupName()); + sceneConfig.setSceneName(retryTaskDTO.getSceneName()); + sceneConfig.setSceneStatus(StatusEnum.YES.getStatus()); + sceneConfig.setBackOff(WaitStrategyEnum.DELAY_LEVEL.getBackOff()); + sceneConfig.setMaxRetryCount(26); + sceneConfig.setDescription("注解配置开启默认初始化场景"); + Assert.isTrue(1 == sceneConfigMapper.insert(sceneConfig), () -> new EasyRetryServerException("init scene error")); + } + @Transactional @Override public Boolean batchReportRetry(List retryTaskDTOList) { diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/strategy/WaitStrategies.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/strategy/WaitStrategies.java index 3c6280ba..01d16ba1 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/strategy/WaitStrategies.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/strategy/WaitStrategies.java @@ -12,6 +12,7 @@ import com.aizuda.easy.retry.server.support.RetryContext; import com.aizuda.easy.retry.server.support.WaitStrategy; import com.aizuda.easy.retry.server.support.context.MaxAttemptsPersistenceRetryContext; import lombok.Data; +import lombok.Getter; import java.text.ParseException; import java.time.LocalDateTime; @@ -34,6 +35,7 @@ public class WaitStrategies { private WaitStrategies() { } + @Getter public enum WaitStrategyEnum { DELAY_LEVEL(1, delayLevelWait()), FIXED(2, fixedWait()), 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 b9e86382..b5b22bf4 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 @@ -46,6 +46,11 @@ public class GroupConfigRequestVO { */ private Integer idGeneratorMode; + /** + * 是否初始化场景 + */ + private Integer initScene; + /** * 通知列表 */ diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/response/GroupConfigResponseVO.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/response/GroupConfigResponseVO.java index 5fe45b41..ffa47986 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/response/GroupConfigResponseVO.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/response/GroupConfigResponseVO.java @@ -30,6 +30,8 @@ public class GroupConfigResponseVO { private String idGeneratorModeName; + private Integer initScene; + private List onlinePodList; private LocalDateTime createDt; diff --git a/easy-retry-server/src/main/resources/mapper/GroupConfigMapper.xml b/easy-retry-server/src/main/resources/mapper/GroupConfigMapper.xml index 7cbac039..abf247c9 100644 --- a/easy-retry-server/src/main/resources/mapper/GroupConfigMapper.xml +++ b/easy-retry-server/src/main/resources/mapper/GroupConfigMapper.xml @@ -9,12 +9,13 @@ + - id, `group_name`, group_status, version, `group_partition`, route_key, id_generator_mode, description, create_dt, update_dt + id, `group_name`, group_status, version, `group_partition`, route_key, id_generator_mode, init_scene, description, create_dt, update_dt diff --git a/example/src/main/java/com/example/demo/RetryRegisterService.java b/example/src/main/java/com/example/demo/RetryRegisterService.java index 38280e14..b7766c4f 100644 --- a/example/src/main/java/com/example/demo/RetryRegisterService.java +++ b/example/src/main/java/com/example/demo/RetryRegisterService.java @@ -26,5 +26,4 @@ public class RetryRegisterService { return "这是一个简单的异常方法"; } - } diff --git a/frontend/src/views/config/GroupList.vue b/frontend/src/views/config/GroupList.vue index 1f64eccd..7a2de29c 100644 --- a/frontend/src/views/config/GroupList.vue +++ b/frontend/src/views/config/GroupList.vue @@ -44,6 +44,9 @@ {{ text === 0 ? '停用': '启用' }} + + {{ text === 0 ? '否': '是' }} +