恢复
策略 | 解释 |
---|---|
恢复 | 继续把失败的任务干完 |
该模式是用在任务类型是多个任务项的情况下使用的,比如像Map这种很多任务项的情景下,还有就是工作流。作用就是跑其中失败的任务。集群任务就一个任务项,执行完后批次状态就变了,连触发任务都不能了,所以千万别在集群模式下选该策略。
继续把失败的任务干完
,那可能你有疑问了。那超时的任务咋处理呢?所以这里我们验证两种情况:
恢复策略中超时的任务
不创建新的任务批次,等待任务完成。
恢复策略中失败的任务
恢复策略中超时的任务
为了应用策略,前提就是要执行当前任务时,前一个任务还没有执行完成。我们如何来验证恢复策略把失败的任务继续干完呢?
- 客户端任务执行超过1分钟,而服务端触发是1分钟一次。这样保证了能应用策略。
- 不希望重试,所以可以把最大重试次数设置为0。
- 超时时间又不能太短。防止它中断线程。所以这里超时设置30分钟
客户端代码
java@Component public class TestStaticShardingRecovery extends AbstractJobExecutor { @Override protected ExecuteResult doJobExecute(JobArgs jobArgs) { // 最后一个分片参数时,客户端睡90秒 if(jobArgs.getJobParams().toString().equals("20001,30000")) { try { Thread.sleep(90000); SnailJobLog.REMOTE.info("参数: {}睡眠90秒", jobArgs.getJobParams()); } catch (InterruptedException e) { return ExecuteResult.failure("任务执行失败.任务:"+jobArgs.getJobParams()); } } return ExecuteResult.success("任务执行成功.任务:"+jobArgs.getJobParams()); } }
客户端代码仅仅对20001,30000这个批次休眠了90秒。其他两个分片任务应该是立刻执行成功。
服务端分片任务配置
配置项 配置内容 任务名称 静态分片任务-恢复策略 组名称 service_plat 状态 启用 任务类型 静态分片 执行器类型 java 执行器名称 com.mayuanfei.test.TestStaticShardingRecovery 方法参数 分片参数 1 :1,10000
分片参数 2 :10001,20000
分片参数 3 :20001,30000阻塞策略 恢复 固定时间 60秒 最大重试次数 0 超时时间 1800秒 并行数 3 测试结果
我们仅仅开一个8090端口的客户端进行测试,可以看到日志输出如下:
恢复策略中失败的任务
要保证前一个任务还没有执行完成,还要有失败。
客户端代码
java@Component public class TestStaticShardingRecoveryFail extends AbstractJobExecutor { @Override protected ExecuteResult doJobExecute(JobArgs jobArgs) { // 第2个分片失败 if(jobArgs.getJobParams().toString().equals("10001,20000")) { SnailJobLog.REMOTE.info("参数: {}失败", jobArgs.getJobParams()); // 生成一个1到100的随机数,如果数值>50则返回失败;否则返回成功 return ExecuteResult.failure("任务执行失败.任务:"+jobArgs.getJobParams()); } // 最后一个分片参数时,客户端睡90秒 if(jobArgs.getJobParams().toString().equals("20001,30000")) { try { Thread.sleep(90000); SnailJobLog.REMOTE.info("参数: {}睡眠90秒", jobArgs.getJobParams()); } catch (InterruptedException e) { return ExecuteResult.failure("任务执行失败.任务:"+jobArgs.getJobParams()); } } return ExecuteResult.success("任务执行成功.任务:"+jobArgs.getJobParams()); } }
服务端分片任务配置
配置项 配置内容 任务名称 静态分片任务-恢复策略-失败 组名称 service_plat 状态 启用 任务类型 静态分片 执行器类型 java 执行器名称 com.mayuanfei.test.TestStaticShardingRecoveryFail 方法参数 分片参数 1 :1,10000
分片参数 2 :10001,20000
分片参数 3 :20001,30000阻塞策略 恢复 固定时间 60秒 最大重试次数 0 超时时间 1800秒 并行数 3 测试结果
当再次调度失败后,整个批次任务状态为处理失败: