feat: 3.1.0

1. 标识重试流量
2. 手动重试每次只执行一次
This commit is contained in:
byteblogs168 2024-02-27 18:36:33 +08:00
parent be12ed7e78
commit e95174085b
12 changed files with 83 additions and 26 deletions

View File

@ -89,6 +89,8 @@ public class JobEndPoint {
jobContext.setArgsStr(dispatchJob.getArgsStr());
jobContext.setWorkflowNodeId(dispatchJob.getWorkflowNodeId());
jobContext.setWorkflowTaskBatchId(dispatchJob.getWorkflowTaskBatchId());
jobContext.setRetry(dispatchJob.isRetry());
jobContext.setRetryScene(dispatchJob.getRetryScene());
return jobContext;
}

View File

@ -116,6 +116,8 @@ public class JobExecutorFutureCallback implements FutureCallback<ExecuteResult>
dispatchJobRequest.setTaskType(jobContext.getTaskType());
dispatchJobRequest.setExecuteResult(executeResult);
dispatchJobRequest.setTaskStatus(status);
dispatchJobRequest.setRetry(jobContext.isRetry());
dispatchJobRequest.setRetryScene(jobContext.getRetryScene());
return dispatchJobRequest;
}
}

View File

@ -53,4 +53,14 @@ public class DispatchJobRequest {
private Integer retryCount;
/**
* 重试场景 automanual
*/
private Integer retryScene;
/**
* 是否是重试流量
*/
private boolean isRetry;
}

View File

@ -31,4 +31,14 @@ public class DispatchJobResultRequest {
private ExecuteResult executeResult;
/**
* 重试场景 automanual
*/
private Integer retryScene;
/**
* 是否是重试流量
*/
private boolean isRetry;
}

View File

@ -36,4 +36,14 @@ public class JobContext {
private Integer executorTimeout;
private String argsStr;
/**
* 重试场景 automanual
*/
private Integer retryScene;
/**
* 是否是重试流量
*/
private boolean isRetry;
}

View File

@ -77,4 +77,14 @@ public class RealJobExecutorDTO extends BaseDTO {
private Long workflowNodeId;
/**
* 重试场景 automanual
*/
private Integer retryScene;
/**
* 是否是重试流量
*/
private boolean isRetry;
}

View File

@ -0,0 +1,19 @@
package com.aizuda.easy.retry.server.job.task.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author: xiaowoniu
* @date : 2024-02-27
* @since : 3.1.0
*/
@AllArgsConstructor
@Getter
public enum JobRetrySceneEnum {
AUTO(1),
MANUAL(2);
private final Integer retryScene;
}

View File

@ -8,6 +8,7 @@ import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
import com.aizuda.easy.retry.server.common.util.ClientInfoUtils;
import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO;
import com.aizuda.easy.retry.server.job.task.dto.RealJobExecutorDTO;
import com.aizuda.easy.retry.server.job.task.enums.JobRetrySceneEnum;
import com.aizuda.easy.retry.server.job.task.support.ClientCallbackHandler;
import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter;
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper;
@ -50,6 +51,8 @@ public abstract class AbstractClientCallbackHandler implements ClientCallbackHan
realJobExecutor.setWorkflowNodeId(context.getWorkflowNodeId());
realJobExecutor.setWorkflowTaskBatchId(context.getWorkflowTaskBatchId());
realJobExecutor.setRetryCount(jobTask.getRetryCount() + 1);
realJobExecutor.setRetry(Boolean.TRUE);
realJobExecutor.setRetryScene(context.getRetryScene());
ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor();
actorRef.tell(realJobExecutor, actorRef);
return;
@ -80,6 +83,13 @@ public abstract class AbstractClientCallbackHandler implements ClientCallbackHan
private boolean isNeedRetry(ClientCallbackContext context) {
// 手动重试策略
if (Objects.nonNull(context.getRetryScene())
&& Objects.equals(JobRetrySceneEnum.MANUAL.getRetryScene(), context.getRetryScene())
&& !context.isRetry()) {
return Boolean.TRUE;
}
if (context.getTaskStatus().equals(JobTaskStatusEnum.FAIL.getStatus())) {
JobTask jobTask = jobTaskMapper.selectById(context.getTaskId());
@ -92,6 +102,7 @@ public abstract class AbstractClientCallbackHandler implements ClientCallbackHan
context.setClientInfo(jobTask.getClientInfo());
context.setJob(job);
context.setJobTask(jobTask);
context.setRetryScene(JobRetrySceneEnum.AUTO.getRetryScene());
return Boolean.TRUE;
}
}
@ -99,9 +110,7 @@ public abstract class AbstractClientCallbackHandler implements ClientCallbackHan
return Boolean.FALSE;
}
protected String chooseNewClient(ClientCallbackContext context) {
return null;
}
protected abstract String chooseNewClient(ClientCallbackContext context);
protected abstract void doCallback(ClientCallbackContext context);

View File

@ -1,6 +1,7 @@
package com.aizuda.easy.retry.server.job.task.support.callback;
import com.aizuda.easy.retry.client.model.ExecuteResult;
import com.aizuda.easy.retry.server.job.task.enums.JobRetrySceneEnum;
import com.aizuda.easy.retry.template.datasource.persistence.po.Job;
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask;
import lombok.Data;
@ -43,5 +44,7 @@ public class ClientCallbackContext {
private JobTask jobTask;
private Integer retryScene;
private boolean isRetry;
}

View File

@ -19,6 +19,7 @@ import com.aizuda.easy.retry.template.datasource.persistence.po.Job;
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -33,14 +34,9 @@ import java.util.Set;
*/
@Component
@Slf4j
@RequiredArgsConstructor
public class ClusterClientCallbackHandler extends AbstractClientCallbackHandler {
@Autowired
private ClientNodeAllocateHandler clientNodeAllocateHandler;
@Autowired
private JobTaskMapper jobTaskMapper;
@Autowired
private JobMapper jobMapper;
private final ClientNodeAllocateHandler clientNodeAllocateHandler;
@Override
public JobTaskTypeEnum getTaskInstanceType() {

View File

@ -10,6 +10,7 @@ import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
import com.aizuda.easy.retry.server.common.enums.JobTaskExecutorSceneEnum;
import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException;
import com.aizuda.easy.retry.server.job.task.dto.TaskExecuteDTO;
import com.aizuda.easy.retry.server.job.task.enums.JobRetrySceneEnum;
import com.aizuda.easy.retry.server.job.task.support.ClientCallbackHandler;
import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter;
import com.aizuda.easy.retry.server.job.task.support.JobTaskStopHandler;
@ -97,6 +98,7 @@ public class JobHandler {
context.setWorkflowTaskBatchId(workflowTaskBatchId);
context.setTaskId(jobTask.getId());
context.setTaskStatus(JobTaskStatusEnum.FAIL.getStatus());
context.setRetryScene(JobRetrySceneEnum.MANUAL.getRetryScene());
context.setExecuteResult(ExecuteResult.failure(null, "手动重试"));
clientCallback.callback(context);
}

View File

@ -1,31 +1,15 @@
package com.aizuda.easy.retry.server.web.service.impl;
import cn.hutool.core.lang.Assert;
import com.aizuda.easy.retry.client.model.ExecuteResult;
import com.aizuda.easy.retry.common.core.enums.JobOperationReasonEnum;
import com.aizuda.easy.retry.common.core.enums.JobTaskBatchStatusEnum;
import com.aizuda.easy.retry.common.core.enums.JobTaskStatusEnum;
import com.aizuda.easy.retry.server.common.enums.JobTaskExecutorSceneEnum;
import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException;
import com.aizuda.easy.retry.server.job.task.dto.WorkflowNodeTaskExecuteDTO;
import com.aizuda.easy.retry.server.job.task.support.ClientCallbackHandler;
import com.aizuda.easy.retry.server.job.task.support.JobExecutor;
import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter;
import com.aizuda.easy.retry.server.job.task.support.JobTaskStopHandler;
import com.aizuda.easy.retry.server.job.task.support.callback.ClientCallbackContext;
import com.aizuda.easy.retry.server.job.task.support.callback.ClientCallbackFactory;
import com.aizuda.easy.retry.server.job.task.support.executor.job.JobExecutorContext;
import com.aizuda.easy.retry.server.job.task.support.executor.job.JobExecutorFactory;
import com.aizuda.easy.retry.server.job.task.support.handler.WorkflowBatchHandler;
import com.aizuda.easy.retry.server.job.task.support.stop.JobTaskStopFactory;
import com.aizuda.easy.retry.server.job.task.support.stop.TaskStopJobContext;
import com.aizuda.easy.retry.server.web.service.WorkflowNodeService;
import com.aizuda.easy.retry.server.web.service.handler.JobHandler;
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper;
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskBatchMapper;
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper;
import com.aizuda.easy.retry.template.datasource.persistence.po.Job;
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask;
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTaskBatch;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;