feat: 3.1.0
1. 标识重试流量 2. 手动重试每次只执行一次
This commit is contained in:
parent
be12ed7e78
commit
e95174085b
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -53,4 +53,14 @@ public class DispatchJobRequest {
|
||||
|
||||
private Integer retryCount;
|
||||
|
||||
/**
|
||||
* 重试场景 auto、manual
|
||||
*/
|
||||
private Integer retryScene;
|
||||
|
||||
/**
|
||||
* 是否是重试流量
|
||||
*/
|
||||
private boolean isRetry;
|
||||
|
||||
}
|
||||
|
@ -31,4 +31,14 @@ public class DispatchJobResultRequest {
|
||||
|
||||
private ExecuteResult executeResult;
|
||||
|
||||
/**
|
||||
* 重试场景 auto、manual
|
||||
*/
|
||||
private Integer retryScene;
|
||||
|
||||
/**
|
||||
* 是否是重试流量
|
||||
*/
|
||||
private boolean isRetry;
|
||||
|
||||
}
|
||||
|
@ -36,4 +36,14 @@ public class JobContext {
|
||||
private Integer executorTimeout;
|
||||
|
||||
private String argsStr;
|
||||
|
||||
/**
|
||||
* 重试场景 auto、manual
|
||||
*/
|
||||
private Integer retryScene;
|
||||
|
||||
/**
|
||||
* 是否是重试流量
|
||||
*/
|
||||
private boolean isRetry;
|
||||
}
|
||||
|
@ -77,4 +77,14 @@ public class RealJobExecutorDTO extends BaseDTO {
|
||||
|
||||
private Long workflowNodeId;
|
||||
|
||||
/**
|
||||
* 重试场景 auto、manual
|
||||
*/
|
||||
private Integer retryScene;
|
||||
|
||||
/**
|
||||
* 是否是重试流量
|
||||
*/
|
||||
private boolean isRetry;
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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() {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user