快速上手
# 添加依赖
项目中引入依赖
// Spring Boot 3.2.2
<dependency>
<groupId>com.aizuda</groupId>
<artifactId>easy-retry-client-starter</artifactId>
<version>3.1.0</version>
</dependency>
// 重试模块
<dependency>
<groupId>com.aizuda</groupId>
<artifactId>easy-retry-client-core</artifactId>
<version>3.1.0</version>
</dependency>
// 任务调度模块
<dependency>
<groupId>com.aizuda</groupId>
<artifactId>easy-retry-client-job-core</artifactId>
<version>3.1.0</version>
</dependency>
# 配置
启动类上添加注解开启easy-retry功能
@SpringBootApplication
@EnableEasyRetry(group = "example_group")
public class ExampleApplication {
public static void main(String[] args) {
SpringApplication.run(ExampleApplication.class, args);
}
}
配置服务地址:
easy-retry:
server:
host: 127.0.0.1 #服务端的地址建议使用域名
port: 1788 #服务端netty的端口号
# 基于@Retryable注解实现重试
# 为需要重试的方法添加重试注解
@Retryable(scene = "errorMethodForLocalAndRemote", localTimes = 3, retryStrategy = RetryType.LOCAL_REMOTE)
public String errorMethodForLocalAndRemote(String name) {
double i = 1 / 0;
return "这是一个简单的异常方法";
}
# Retryable 详解
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
scene | String | 是 | 无 | 场景 |
include | Throwable | 否 | 无 | 包含的异常 |
exclude | Throwable | 否 | 无 | 排除的异常 |
retryStrategy | RetryType | 是 | LOCAL_REMOTE | 重试策略 |
retryMethod | RetryMethod | 是 | RetryAnnotationMethod | 重试处理入口 |
idempotentId | IdempotentIdGenerate | 是 | SimpleIdempotentIdGenerate | 幂等id生成器,默认的idempotentId生成器{@link SimpleIdempotentIdGenerate} 对所有参数进行MD5 |
retryCompleteCallback | RetryCompleteCallback | 否 | SimpleRetryCompleteCallback | 服务端重试完成(重试成功、重试到达最大次数)回调客户端 |
isThrowException | boolean | 否 | true | 本地重试完成后是否抛出异常 |
bizNo | String | 否 | 无 | bizNo spel表达式 (opens new window) |
localTimes | int | 是 | 3 | 本地重试次数 次数必须大于等于1 |
localInterval | int | 是 | 2 | 本地重试间隔时间(s) |
timeout | long | 否 | 60 * 1000 | 同步(async:false)上报数据需要配置超时时间 |
unit | TimeUnit | 否 | TimeUnit.MILLISECONDS | 超时时间单位 |
forceReport | boolean | 否 | false | 是否强制上报数据到服务端 |
# 自定义生成重试任务
注意
生成重试任务是将任务在客户端创建并上报到服务端,由服务端调度并通知客户端进行重试
# ExecutorMethodRegister 详解
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
scene | String | 是 | 无 | 场景 |
include | Throwable | 否 | 无 | 包含的异常 |
exclude | Throwable | 否 | 无 | 排除的异常 |
retryStrategy | RetryType | 是 | LOCAL_REMOTE | 重试策略 |
retryMethod | RetryMethod | 是 | RetryAnnotationMethod | 重试处理入口 |
idempotentId | IdempotentIdGenerate | 是 | SimpleIdempotentIdGenerate | 幂等id生成器,默认的idempotentId生成器{@link SimpleIdempotentIdGenerate} 对所有参数进行MD5 |
retryCompleteCallback | RetryCompleteCallback | 否 | SimpleRetryCompleteCallback | 服务端重试完成(重试成功、重试到达最大次数)回调客户端 |
bizNo | String | 否 | 无 | bizNo spel表达式 |
async | boolean | 否 | true | 异步上报数据到服务端 |
timeout | long | 否 | 60 * 1000 | 同步(async:false)上报数据需要配置超时时间 |
unit | TimeUnit | 否 | TimeUnit.MILLISECONDS | 超时时间单位 |
forceReport | boolean | 否 | false | 是否强制上报数据到服务端 |
# 新建一个自定义任务执行器
// 这个一个自定义任务执行器
@ExecutorMethodRegister(scene = CustomSyncCreateTask.SCENE, async = false, timeout = 10000, unit = TimeUnit.MILLISECONDS, forceReport = true)
@Slf4j
public class CustomSyncCreateTask implements ExecutorMethod {
public static final String SCENE = "customSyncCreateTask";
@Override
public Object doExecute(Object obj) {
return "测试成功";
}
}
# 在代码中执行重试
public void generateAsyncTaskTest() throws InterruptedException {
Cat cat = new Cat();
cat.setName("zsd");
Zoo zoo = new Zoo();
zoo.setNow(LocalDateTime.now());
EasyRetryTemplate retryTemplate = RetryTaskTemplateBuilder.newBuilder()
.withExecutorMethod(CustomAsyncCreateTask.class)
.withParam(zoo)
.withScene(CustomAsyncCreateTask.SCENE)
.build();
retryTemplate.executeRetry();
Thread.sleep(90000);
}
# 配置部署服务端调度平台
# 初始化数据库
数据库脚本位置
doc/sql/easy_retry.sql
# 系统配置
spring:
datasource:
name: easy_retry
url: jdbc:mysql://localhost:3306/x_retry?useSSL=false&characterEncoding=utf8&useUnicode=true
username: root
password: root
....其他配置信息....
easy-retry:
last-days: 30 # 拉取重试数据的天数
retry-pull-page-size: 100 # 拉取重试数据的每批次的大小
netty-port: 1788 # 服务端netty端口
total-partition: 2 # 重试和死信表的分区总数
limiter: 10 # 一个客户端每秒最多接收的重试数量指令
step: 100 # 号段模式下步长配置
log-storage: 90 # 日志保存时间(单位: day)
callback: # 回调配置
max-count: 288 #回调最大执行次数
trigger-interval: 900 #间隔时间
# 项目部署
# 下载源码部署
下载源码
https://gitee.com/aizuda/easy-retry.git 或 https://github.com/aizuda/easy-retry.git
maven 打包镜像
maven clean install
- 修改配置
/easy-retry-server/src/main/resources/application.yml
- 启动
java -jar easy-retry-server.jar
# docker 部署
- 下载镜像
docker pull byteblogs/easy-retry:2.0.1
- 创建容器并运行
/**
* 如需自定义 mysql 等配置,可通过 "-e PARAMS" 指定,参数格式 PARAMS="--key1=value1 --key2=value2" ;
* 配置项参考文件:/easy-retry-server/src/main/resources/application.yml
* 如需自定义 JVM内存参数 等配置,可通过 "-e JAVA_OPTS" 指定,参数格式 JAVA_OPTS="-Xmx512m" ;
*/
docker run \
-e PARAMS="--spring.datasource.username=root --spring.datasource.password=root --spring.datasource.url=jdbc:mysql://IP:3306/easy_retry?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai " \
-p 8080:8080 \
-p 1788:1788 \
--name easy-retry-server-1 \
-d byteblogs/easy-retry:2.0.1
如果你已经正确启动系统了,那么你可以输入以下地址就可以进入管理系统了
http://localhost:8080
# 帮助我们改善此页面 (opens new window)
上次更新: 2024/03/12, 17:29:47