diff --git a/README.md b/README.md index 20963f2bd..06af831d5 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,24 @@

- + Easy-Retry-Logo

- 分布式重试服务平台 Easy-Retry + 🔥🔥🔥基于BASE思想实现的分布式服务重试组件

# 简介 ->在分布式系统大行其道的当前,系统数据的准确性和正确性是重大的挑战,基于CAP理论,采用柔性事务,保障系统可用性以及数据的最终一致性成为技术共识 ->为了保障分布式服务的可用性,服务容错性,服务数据一致性 以及服务间掉用的网络问题。依据"墨菲定律",增加核心流程重试,数据核对校验成为提高系统鲁棒性常用的技术方案 -> +> 在当前广泛流行的分布式系统中,确保系统数据的一致性和正确性是一项重大挑战。为了解决分布式事务问题,涌现了许多理论和业务实践,其中BASE理论是目前业界广泛接受的分布式一致性理论。 +> 基于BASE理论,采用柔性事务并优先保障系统的可用性和数据的最终一致性已逐渐成为技术共识。 +> 为了确保分布式服务的可用性和数据一致性,并防止由于网络抖动、连接超时等问题导致短时不可用的情况,根据"墨菲定律",在核心流程中增加重试和数据核对校验的动作成为提高系统鲁棒性常用的技术方案。 +> 在此背景下EasyRetry应运而生。EasyRetry是一款基于BASE思想实现的分布式服务重试组件,旨在通过重试机制确保数据的最终一致性。它提供了控制台任务观测、可配置的重试策略、重试后执行回调以及丰富地告警配置等功能。通过这些手段,可以对异常数据进行全面监测和回放,从而在确保系统高可用性的同时,大大提升数据的一致性。 + > 通常的业务场景有: -> + 保障系统稳定性,减少网络抖动导致异常,增加重试能力 +>+ 保障系统稳定性,减少网络抖动导致异常,增加重试能力 >+ 保障服务容错性,对核心流程进行拆分,在业务低峰期进行数据核对 >+ 保证信息的可达性,在服务间通知时增加重试 > @@ -41,14 +43,13 @@ ## 相关链接 - [字节跳动: 如何优雅地重试](https://juejin.cn/post/6914091859463634951) -- [文档](https://www.easyretry.com/pages/a2f161/) -- [功能实例](https://www.easyretry.com/pages/960e25/) +- [文档](https://www.easyretry.com/pages/d1d1da/) +- [HelloWorld](https://www.easyretry.com/pages/da9ecc/) ## 原理 -- [客户端原理剖析](https://gitee.com/aizuda/easy-retry/tree/dev/example) -- [服务端原理剖析](https://gitee.com/aizuda/easy-retry/tree/dev/example) +- [架构与功能](https://www.easyretry.com/pages/540554/) ## 应用实例 -- [Spring-Boot](https://gitee.com/aizuda/easy-retry/tree/dev/example) +- [Spring-Boot](https://gitee.com/zhangyutongxue/easy-retry-demo) ## 期望 欢迎提出更好的意见,帮助完善 Easy-Retry diff --git a/easy-retry-client-core/pom.xml b/easy-retry-client-core/pom.xml index 464264c33..eb9223931 100644 --- a/easy-retry-client-core/pom.xml +++ b/easy-retry-client-core/pom.xml @@ -25,10 +25,6 @@ spring-boot-starter-web provided - - org.springframework.boot - spring-boot-starter-jdbc - org.springframework.boot spring-boot-starter-aop @@ -48,11 +44,6 @@ cn.hutool hutool-all - - org.springframework.boot - spring-boot-starter-test - test - com.aizuda easy-retry-common-core diff --git a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/client/RetryEndPoint.java b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/client/RetryEndPoint.java index a6a77ab37..76371930f 100644 --- a/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/client/RetryEndPoint.java +++ b/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/client/RetryEndPoint.java @@ -60,7 +60,7 @@ public class RetryEndPoint { * 服务端调度重试入口 */ @PostMapping("/dispatch/v1") - public Result dispatch(@RequestBody DispatchRetryDTO executeReqDto) { + public Result dispatch(@RequestBody @Validated DispatchRetryDTO executeReqDto) { RetryerInfo retryerInfo = RetryerInfoCache.get(executeReqDto.getScene(), executeReqDto.getExecutorName()); if (Objects.isNull(retryerInfo)) { @@ -119,7 +119,7 @@ public class RetryEndPoint { } @PostMapping("/callback/v1") - public Result callback(@RequestBody RetryCallbackDTO callbackDTO) { + public Result callback(@RequestBody @Validated RetryCallbackDTO callbackDTO) { RetryerInfo retryerInfo = RetryerInfoCache.get(callbackDTO.getScene(), callbackDTO.getExecutorName()); if (Objects.isNull(retryerInfo)) { throw new EasyRetryClientException("场景:[{}]配置不存在", callbackDTO.getScene()); diff --git a/easy-retry-client-core/src/test/java/com/x/retry/common/client/core/xretryclientcore/XRetryClientCoreApplicationTests.java b/easy-retry-client-core/src/test/java/com/x/retry/common/client/core/xretryclientcore/XRetryClientCoreApplicationTests.java deleted file mode 100644 index b69a8c9da..000000000 --- a/easy-retry-client-core/src/test/java/com/x/retry/common/client/core/xretryclientcore/XRetryClientCoreApplicationTests.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.x.retry.common.client.core.xretryclientcore; - -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class XRetryClientCoreApplicationTests { - -} diff --git a/easy-retry-client-starter/pom.xml b/easy-retry-client-starter/pom.xml index e239be0e9..33139eb17 100644 --- a/easy-retry-client-starter/pom.xml +++ b/easy-retry-client-starter/pom.xml @@ -20,18 +20,17 @@ org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-test - test + spring-boot-starter-web + provided com.aizuda easy-retry-client-core + + org.springframework + spring-tx + diff --git a/easy-retry-client-starter/src/test/java/com/x/retry/common/client/starter/xretryclientstarter/XRetryClientStarterApplicationTests.java b/easy-retry-client-starter/src/test/java/com/x/retry/common/client/starter/xretryclientstarter/XRetryClientStarterApplicationTests.java deleted file mode 100644 index 84ca6732d..000000000 --- a/easy-retry-client-starter/src/test/java/com/x/retry/common/client/starter/xretryclientstarter/XRetryClientStarterApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.x.retry.common.client.starter.xretryclientstarter; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class XRetryClientStarterApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/easy-retry-common/easy-retry-common-client-api/pom.xml b/easy-retry-common/easy-retry-common-client-api/pom.xml index 32bfd9a54..86ca72f70 100644 --- a/easy-retry-common/easy-retry-common-client-api/pom.xml +++ b/easy-retry-common/easy-retry-common-client-api/pom.xml @@ -21,7 +21,7 @@ org.springframework.boot - spring-boot-starter-web + spring-boot-starter-validation @@ -34,10 +34,6 @@ com.aizuda easy-retry-common-core - - org.hibernate - hibernate-validator - diff --git a/easy-retry-common/easy-retry-common-core/pom.xml b/easy-retry-common/easy-retry-common-core/pom.xml index 9f8c09ab8..3acf7b30d 100644 --- a/easy-retry-common/easy-retry-common-core/pom.xml +++ b/easy-retry-common/easy-retry-common-core/pom.xml @@ -23,26 +23,19 @@ org.springframework.boot spring-boot-starter-web - org.projectlombok lombok true - - org.springframework.boot - spring-boot-starter-test - test - com.aliyun alibaba-dingtalk-service-sdk - commons-configuration commons-configuration - 1.8 + 1.10 javax.validation diff --git a/easy-retry-common/easy-retry-common-server-api/pom.xml b/easy-retry-common/easy-retry-common-server-api/pom.xml index c389d8144..770e72acd 100644 --- a/easy-retry-common/easy-retry-common-server-api/pom.xml +++ b/easy-retry-common/easy-retry-common-server-api/pom.xml @@ -19,23 +19,19 @@ - - org.springframework.boot - spring-boot-starter-web - org.projectlombok lombok true - - org.hibernate - hibernate-validator - com.aizuda easy-retry-common-core + + org.springframework.boot + spring-boot-starter-validation + diff --git a/easy-retry-common/pom.xml b/easy-retry-common/pom.xml index 46c3ba8b5..7df93c6a3 100644 --- a/easy-retry-common/pom.xml +++ b/easy-retry-common/pom.xml @@ -24,28 +24,4 @@ easy-retry-common-core - - - org.springframework.boot - spring-boot-starter-web - - - - - - - - - - - - - - - - - - - - diff --git a/easy-retry-server/pom.xml b/easy-retry-server/pom.xml index 716fcf4e6..9e55529df 100644 --- a/easy-retry-server/pom.xml +++ b/easy-retry-server/pom.xml @@ -18,13 +18,14 @@ 1.8 true 1.5.3.Final - 2.6.20 - 4.3.0 + 2.6.21 + 4.4.0 4.0.1 - 4.10.0 + 5.0.0-alpha.11 2.6 0.9.16 - 8.0.32 + 8.0.33 + 32.0.0-jre @@ -32,6 +33,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-validation + com.baomidou mybatis-plus-boot-starter @@ -50,7 +55,7 @@ com.google.guava guava - 31.1-jre + ${guava.version} org.projectlombok @@ -133,16 +138,6 @@ perf4j ${perf4j.version} - - org.hibernate - hibernate-validator - - - org.jetbrains - annotations - 13.0 - compile - 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 e3f06d18f..65966c715 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 @@ -10,6 +10,7 @@ import org.springframework.util.CollectionUtils; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -62,6 +63,9 @@ public class MybatisConfigAccess extends AbstractConfigAccess { public Set getBlacklist(String groupName) { GroupConfig groupConfig = getByGroupName(groupName); + if (Objects.isNull(groupConfig)) { + return Collections.EMPTY_SET; + } LambdaQueryWrapper sceneConfigLambdaQueryWrapper = new LambdaQueryWrapper() .eq(SceneConfig::getSceneName, groupName); diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/generator/TaskGenerator.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/generator/TaskGenerator.java index a4cea93b6..e4ec3d761 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/generator/TaskGenerator.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/generator/TaskGenerator.java @@ -23,7 +23,6 @@ public interface TaskGenerator { * 任务生成器 * * @param taskContext 任务列表 - * @return 成功处理的数据量 */ void taskGenerator(TaskContext taskContext); } diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/generator/task/TaskContext.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/generator/task/TaskContext.java index fa5a027ad..0ad77570c 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/generator/task/TaskContext.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/support/generator/task/TaskContext.java @@ -5,9 +5,11 @@ import lombok.Data; import java.util.List; /** + * 任务生成器上下文 + * * @author www.byteblogs.com * @date 2023-07-16 21:26:52 - * @since + * @since 2.1.0 */ @Data public class TaskContext { diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/ServerNodeQueryVO.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/ServerNodeQueryVO.java index dfc717513..7b256a9d2 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/ServerNodeQueryVO.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/ServerNodeQueryVO.java @@ -2,9 +2,6 @@ package com.aizuda.easy.retry.server.web.model.request; import com.aizuda.easy.retry.server.web.model.base.BaseQueryVO; import lombok.Data; -import org.hibernate.validator.constraints.NotBlank; - -import javax.validation.constraints.NotNull; /** diff --git a/pom.xml b/pom.xml index 06a433eb2..0e974fd74 100644 --- a/pom.xml +++ b/pom.xml @@ -21,12 +21,11 @@ 1.8 1.8 1.8 - 2.0.1 + 2.1.0-SNAPSHOT 1.0.0 - 5.4.2.Final - 4.1.48.Final - 5.7.21 - 3.5.1 + 4.1.94.Final + 5.8.19 + 3.5.3.1 2.0.0 @@ -82,11 +81,6 @@ mybatis-plus-boot-starter ${mybatis-plus.version} - - org.hibernate - hibernate-validator - ${hibernate-validator.version} -