Skip to content

最大重试次数和间隔

Job的重试任务没有任何关系, 重试任务是SnailJob另一个独立的模块

重试的触发时机

  • 网络超时
  • 客户端明确返回错误
  • 客户端出现异常

那我们客户端代码随便来个被0除的异常即可。余下的两种情况可自行进行测试。

客户端代码

java
@Component
public class TestRetryTimes extends AbstractJobExecutor {
    @Override
    protected ExecuteResult doJobExecute(JobArgs jobArgs) {
        int i = 1/0;
        return ExecuteResult.success();
    }
}

这里还是用上一篇文章中推荐的继承虚基类方式来做定时任务。好处有:

  • idea能自动补充需要实现的接口类。省得记入参和返回参数。
  • 避免任务重名

页面关键配置

其他配置项和上面的验证注解方式定时任务配置一样

配置项配置内容
任务名称测试最大重试次数和间隔
执行器名称com.bjltd.test.TestRetryTimes
触发类型CRON表达式
间隔时长0 22 09 * * ?
最大重试次数4
重试间隔10秒

说明

  • 执行器名称要填写包全路径名。这个是和注解方式有很大区别。
  • 这里采用cron表达式,任务每天就激活一次。主要为了方便查看测试结果,也更贴合实际应用场景。

测试结果

  • 客户端的控台

    这里抽取关键打印信息:

    shell
    2024-09-23 09:22:10 [snail-netty-server-2] INFO  c.a.s.c.job.core.client.JobEndPoint
     - 任务执行/调度失败执行重试. 重试次数:[1]
    2024-09-23 09:22:20 [snail-netty-server-3] INFO  c.a.s.c.job.core.client.JobEndPoint
     - 任务执行/调度失败执行重试. 重试次数:[2]
    2024-09-23 09:22:31 [snail-netty-server-4] INFO  c.a.s.c.job.core.client.JobEndPoint
     - 任务执行/调度失败执行重试. 重试次数:[3]
    2024-09-23 09:22:41 [snail-netty-server-5] INFO  c.a.s.c.job.core.client.JobEndPoint
     - 任务执行/调度失败执行重试. 重试次数:[4]
  • 任务管理页面查看日志

    任务管理页面->点任务名称为测试最大重试次数和间隔任务项后面的批次按钮。在执行批次列表中点批次后面的日志按钮。

在执行批次详情页面中点击查看日志按钮

在日志详情中可以看到本批次的详细情况

测试总结

  • 网络超时、客户端明确返回错误、客户端出现异常会触发重试

  • 最大重试次数可以设置重试多少次

  • 重试间隔可以设置每次重试之间间隔的时间