feat(sj_1.0.0): 定时任务手动重试添加超时检查

This commit is contained in:
opensnail 2024-05-23 09:34:30 +08:00
parent 6f727af7d0
commit 945c77bdc0
2 changed files with 12 additions and 2 deletions

View File

@ -28,7 +28,7 @@
<akka.version>2.6.21</akka.version>
<java-jwt.version>4.4.0</java-jwt.version>
<perf4j.version>0.9.16</perf4j.version>
<guava.version>32.0.0-jre</guava.version>
<guava.version>33.2.0-jre</guava.version>
</properties>
<dependencyManagement>

View File

@ -10,6 +10,7 @@ import com.aizuda.snailjob.common.core.enums.JobTaskStatusEnum;
import com.aizuda.snailjob.server.common.akka.ActorGenerator;
import com.aizuda.snailjob.server.common.enums.JobTaskExecutorSceneEnum;
import com.aizuda.snailjob.server.common.exception.SnailJobServerException;
import com.aizuda.snailjob.server.common.util.DateUtils;
import com.aizuda.snailjob.server.job.task.dto.TaskExecuteDTO;
import com.aizuda.snailjob.server.job.task.enums.JobRetrySceneEnum;
import com.aizuda.snailjob.server.job.task.support.ClientCallbackHandler;
@ -19,6 +20,8 @@ import com.aizuda.snailjob.server.job.task.support.callback.ClientCallbackContex
import com.aizuda.snailjob.server.job.task.support.callback.ClientCallbackFactory;
import com.aizuda.snailjob.server.job.task.support.stop.JobTaskStopFactory;
import com.aizuda.snailjob.server.job.task.support.stop.TaskStopJobContext;
import com.aizuda.snailjob.server.job.task.support.timer.JobTimeoutCheckTask;
import com.aizuda.snailjob.server.job.task.support.timer.JobTimerWheel;
import com.aizuda.snailjob.template.datasource.persistence.mapper.JobMapper;
import com.aizuda.snailjob.template.datasource.persistence.mapper.JobTaskBatchMapper;
import com.aizuda.snailjob.template.datasource.persistence.mapper.JobTaskMapper;
@ -29,6 +32,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.time.Duration;
import java.util.List;
/**
@ -57,7 +61,8 @@ public class JobHandler {
// 重置状态为运行中
jobTaskBatch.setTaskBatchStatus(JobTaskBatchStatusEnum.RUNNING.getStatus());
// 重置状态原因
jobTaskBatch.setOperationReason(JobOperationReasonEnum.NONE.getReason());
Assert.isTrue(jobTaskBatchMapper.updateById(jobTaskBatch) > 0,
() -> new SnailJobServerException("update job batch to running failed."));
@ -104,6 +109,11 @@ public class JobHandler {
clientCallback.callback(context);
}
// 运行中的任务需要进行超时检查
JobTimerWheel.registerWithJob(() -> new JobTimeoutCheckTask(taskBatchId, job.getId()),
// 加500ms是为了让尽量保证客户端自己先超时中断防止客户端上报成功但是服务端已触发超时中断
Duration.ofMillis(DateUtils.toEpochMilli(job.getExecutorTimeout()) + 500));
return Boolean.TRUE;
}