From b3c4cd92c1d5023be9038133bde3e8c306cd5f31 Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Sat, 14 Oct 2023 17:08:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:2.4.0=201.=20=E5=AE=8C=E6=88=90=E7=9A=84?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=8F=B0=E7=9A=84=E6=97=A5=E5=BF=97=20?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=20=E6=89=B9=E6=AC=A1=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E9=A1=B5=E5=92=8C=E8=AF=A6=E6=83=85=E9=A1=B5=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/enums/JobTaskStatusEnum.java | 2 - .../mysql/mapper/JobLogMessageMapper.xml | 3 +- .../server/common/client/RequestBuilder.java | 14 +- .../job/task/support/JobTaskConverter.java | 9 +- .../support/dispatch/JobExecutorActor.java | 5 +- .../task/support/dispatch/JobLogActor.java | 2 +- .../executor/BroadcastTaskJobExecutor.java | 3 +- .../support/executor/ClusterJobExecutor.java | 3 +- .../support/executor/JobExecutorContext.java | 34 +- .../executor/RealJobExecutorActor.java | 1 - .../support/executor/ShardingJobExecutor.java | 3 +- .../task/support/stop/RealStopTaskActor.java | 6 +- .../retry/task/client/RetryRpcClient.java | 4 +- .../retry/task/support/RetryContext.java | 7 + .../support/context/CallbackRetryContext.java | 11 + .../MaxAttemptsPersistenceRetryContext.java | 12 + .../actor/exec/ExecCallbackUnitActor.java | 30 +- .../dispatch/actor/exec/ExecUnitActor.java | 25 +- .../dispatch/task/CallbackTaskExecutor.java | 1 + .../task/ManualCallbackTaskExecutor.java | 1 + .../task/ManualRetryTaskExecutor.java | 4 +- .../dispatch/task/RetryTaskExecutor.java | 2 +- .../service/impl/RetryTaskServiceImpl.java | 6 +- frontend/src/api/jobApi.js | 23 +- frontend/src/config/router.config.js | 23 +- frontend/src/utils/enum.js | 149 ++++++ frontend/src/views/job/JobBatchInfo.vue | 80 ++++ .../job/{JobBatch.vue => JobBatchList.vue} | 116 +---- frontend/src/views/job/JobInfo.vue | 72 ++- frontend/src/views/job/JobList.vue | 58 +-- frontend/src/views/job/JobLogMessageList.vue | 81 ++++ frontend/src/views/job/JobTask.vue | 445 ------------------ frontend/src/views/job/JobTaskList.vue | 325 +++++++++++++ 33 files changed, 870 insertions(+), 690 deletions(-) create mode 100644 frontend/src/utils/enum.js create mode 100644 frontend/src/views/job/JobBatchInfo.vue rename frontend/src/views/job/{JobBatch.vue => JobBatchList.vue} (80%) create mode 100644 frontend/src/views/job/JobLogMessageList.vue delete mode 100644 frontend/src/views/job/JobTask.vue create mode 100644 frontend/src/views/job/JobTaskList.vue diff --git a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/JobTaskStatusEnum.java b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/JobTaskStatusEnum.java index bc7914f2..a926720f 100644 --- a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/JobTaskStatusEnum.java +++ b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/JobTaskStatusEnum.java @@ -35,8 +35,6 @@ public enum JobTaskStatusEnum { * 任务停止 */ STOP(5), - - ; private final int status; diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobLogMessageMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobLogMessageMapper.xml index 24a647ab..6c87b753 100644 --- a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobLogMessageMapper.xml +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobLogMessageMapper.xml @@ -8,7 +8,8 @@ - + + diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/client/RequestBuilder.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/client/RequestBuilder.java index b1108e88..107a8849 100644 --- a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/client/RequestBuilder.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/client/RequestBuilder.java @@ -18,7 +18,6 @@ import java.util.Objects; public class RequestBuilder { private Class clintInterface; - private String groupName; private RegisterNodeInfo nodeInfo; private boolean failRetry; private int retryTimes = 3; @@ -43,10 +42,10 @@ public class RequestBuilder { return this; } - public RequestBuilder groupName(String groupName) { - this.groupName = groupName; - return this; - } +// public RequestBuilder groupName(String groupName) { +// this.groupName = groupName; +// return this; +// } public RequestBuilder failRetry(boolean failRetry) { this.failRetry = failRetry; @@ -68,7 +67,7 @@ public class RequestBuilder { return this; } - public RequestBuilder allocKey(boolean failover) { + public RequestBuilder failover(boolean failover) { this.failover = failover; return this; } @@ -89,7 +88,6 @@ public class RequestBuilder { throw new EasyRetryServerException("clintInterface cannot be null"); } - Assert.notBlank(groupName, () -> new EasyRetryServerException("groupName cannot be null")); Assert.notNull(nodeInfo, () -> new EasyRetryServerException("nodeInfo cannot be null")); if (failover) { @@ -103,7 +101,7 @@ public class RequestBuilder { } RpcClientInvokeHandler clientInvokeHandler = new RpcClientInvokeHandler( - groupName, nodeInfo, failRetry, retryTimes, retryInterval, retryListener, routeKey, allocKey, failover); + nodeInfo.getGroupName(), nodeInfo, failRetry, retryTimes, retryInterval, retryListener, routeKey, allocKey, failover); return (T) Proxy.newProxyInstance(clintInterface.getClassLoader(), new Class[]{clintInterface}, clientInvokeHandler); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/JobTaskConverter.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/JobTaskConverter.java index 6ecc1ab3..e329b9ff 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/JobTaskConverter.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/JobTaskConverter.java @@ -65,13 +65,18 @@ public interface JobTaskConverter { DispatchJobRequest toDispatchJobRequest(RealJobExecutorDTO realJobExecutorDTO); @Mappings({ - @Mapping(source = "job.groupName", target = "groupName"), + @Mapping(source = "jobTask.groupName", target = "groupName"), + @Mapping(source = "jobTask.jobId", target = "jobId"), + @Mapping(source = "jobTask.taskBatchId", target = "taskBatchId"), + @Mapping(source = "jobTask.clientId", target = "clientId"), @Mapping(source = "jobTask.id", target = "taskId"), @Mapping(source = "jobTask.argsStr", target = "argsStr"), @Mapping(source = "jobTask.argsType", target = "argsType"), @Mapping(source = "jobTask.extAttrs", target = "extAttrs") }) - RealJobExecutorDTO toRealJobExecutorDTO(Job job, JobTask jobTask); + RealJobExecutorDTO toRealJobExecutorDTO(JobExecutorContext context, JobTask jobTask); + + JobExecutorContext toJobExecutorContext(Job job); JobExecutorResultDTO toJobExecutorResultDTO(ClientCallbackContext context); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java index a41f1ea5..18771296 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java @@ -5,6 +5,7 @@ import com.aizuda.easy.retry.common.core.log.LogUtils; import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.job.task.dto.TaskExecuteDTO; 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.executor.JobExecutorContext; import com.aizuda.easy.retry.server.job.task.support.executor.JobExecutorFactory; import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper; @@ -44,12 +45,10 @@ public class JobExecutorActor extends AbstractActor { Job job = jobMapper.selectById(taskExecute.getJobId()); JobExecutor jobExecutor = JobExecutorFactory.getJobExecutor(job.getTaskType()); - JobExecutorContext context = new JobExecutorContext(); + JobExecutorContext context = JobTaskConverter.INSTANCE.toJobExecutorContext(job); context.setTaskBatchId(taskExecute.getTaskBatchId()); - context.setGroupName(taskExecute.getGroupName()); context.setJobId(job.getId()); context.setTaskType(job.getTaskType()); - context.setJob(job); jobExecutor.execute(context); } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobLogActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobLogActor.java index ea76a330..e71f1fb9 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobLogActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobLogActor.java @@ -49,7 +49,7 @@ public class JobLogActor extends AbstractActor { JobLogMessage jobLogMessage = JobTaskConverter.INSTANCE.toJobLogMessage(jobLogDTO); if (Objects.nonNull(jobLogDTO.getClientId())) { Optional.ofNullable(CacheRegisterTable.getServerNode(jobLogDTO.getGroupName(), jobLogDTO.getClientId())).ifPresent(registerNodeInfo -> { - jobLogMessage.setClientAddress(registerNodeInfo.fullUrl()); + jobLogMessage.setClientAddress(registerNodeInfo.address()); }); } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/BroadcastTaskJobExecutor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/BroadcastTaskJobExecutor.java index e0bc7c4f..22f84936 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/BroadcastTaskJobExecutor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/BroadcastTaskJobExecutor.java @@ -29,11 +29,10 @@ public class BroadcastTaskJobExecutor extends AbstractJobExecutor { @Override protected void doExecute(JobExecutorContext context) { - Job job = context.getJob(); List taskList = context.getTaskList(); for (JobTask jobTask : taskList) { - RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(job, jobTask); + RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(context, jobTask); ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor(); actorRef.tell(realJobExecutor, actorRef); } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/ClusterJobExecutor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/ClusterJobExecutor.java index d12c293e..b7c5a47b 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/ClusterJobExecutor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/ClusterJobExecutor.java @@ -31,9 +31,8 @@ public class ClusterJobExecutor extends AbstractJobExecutor { protected void doExecute(JobExecutorContext context) { // 调度客户端 - Job job = context.getJob(); List taskList = context.getTaskList(); - RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(job, taskList.get(0)); + RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(context, taskList.get(0)); ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor(); actorRef.tell(realJobExecutor, actorRef); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/JobExecutorContext.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/JobExecutorContext.java index 3001e200..e8daaa27 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/JobExecutorContext.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/JobExecutorContext.java @@ -1,6 +1,5 @@ package com.aizuda.easy.retry.server.job.task.support.executor; -import com.aizuda.easy.retry.template.datasource.persistence.po.Job; import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask; import lombok.Data; @@ -48,4 +47,37 @@ public class JobExecutorContext { private Integer routeKey; + /** + * 扩展字段 + */ + private String extAttrs; + + + + private Long taskId; + + + private Integer parallelNum; + + private Integer executorType; + + private String executorName; + + private String clientId; + + /** + * 最大重试次数 + */ + private Integer maxRetryTimes; + + /** + * 重试间隔(s) + */ + private Integer retryInterval; + + private Integer shardingTotal; + + private Integer shardingIndex; + + private Integer executorTimeout; } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/RealJobExecutorActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/RealJobExecutorActor.java index 9cda79d8..b9503066 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/RealJobExecutorActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/RealJobExecutorActor.java @@ -115,7 +115,6 @@ public class RealJobExecutorActor extends AbstractActor { private JobRpcClient buildRpcClient(RegisterNodeInfo registerNodeInfo, RealJobExecutorDTO realJobExecutorDTO) { return RequestBuilder.newBuilder() - .groupName(registerNodeInfo.getGroupName()) .nodeInfo(registerNodeInfo) .failRetry(Boolean.TRUE) .retryTimes(realJobExecutorDTO.getMaxRetryTimes()) diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/ShardingJobExecutor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/ShardingJobExecutor.java index 7d1dbbd0..cc32653b 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/ShardingJobExecutor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/ShardingJobExecutor.java @@ -30,10 +30,9 @@ public class ShardingJobExecutor extends AbstractJobExecutor { @Override protected void doExecute(JobExecutorContext context) { - Job job = context.getJob(); List taskList = context.getTaskList(); for (int i = 0; i < taskList.size(); i++) { - RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(job, taskList.get(i)); + RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(context, taskList.get(i)); realJobExecutor.setShardingIndex(i); realJobExecutor.setShardingTotal(taskList.size()); ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor(); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/stop/RealStopTaskActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/stop/RealStopTaskActor.java index 76e85d07..ff982505 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/stop/RealStopTaskActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/stop/RealStopTaskActor.java @@ -49,11 +49,7 @@ public class RealStopTaskActor extends AbstractActor { private Result requestClient(RealStopTaskInstanceDTO realStopTaskInstanceDTO, RegisterNodeInfo registerNodeInfo) { JobRpcClient rpcClient = RequestBuilder.newBuilder() - .hostPort(registerNodeInfo.getHostPort()) - .groupName(realStopTaskInstanceDTO.getGroupName()) - .hostId(registerNodeInfo.getHostId()) - .hostIp(registerNodeInfo.getHostIp()) - .contextPath(registerNodeInfo.getContextPath()) + .nodeInfo(registerNodeInfo) .failRetry(Boolean.TRUE) .retryTimes(3) .retryInterval(1) diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/client/RetryRpcClient.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/client/RetryRpcClient.java index 8fde7564..01ff454b 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/client/RetryRpcClient.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/client/RetryRpcClient.java @@ -22,10 +22,10 @@ import com.aizuda.easy.retry.server.common.client.annotation.Mapping; */ public interface RetryRpcClient { - @Mapping(path = "/retry/dispatch/v1", method = RequestMethod.POST, failover = true) + @Mapping(path = "/retry/dispatch/v1", method = RequestMethod.POST) Result dispatch(@Body DispatchRetryDTO dispatchRetryDTO, @Header EasyRetryHeaders headers); - @Mapping(path = "/retry/callback/v1", method = RequestMethod.POST, failover = true) + @Mapping(path = "/retry/callback/v1", method = RequestMethod.POST) Result callback(@Body RetryCallbackDTO retryCallbackDTO); @Mapping(path = "/retry/generate/idempotent-id/v1", method = RequestMethod.POST) diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryContext.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryContext.java index b9ec9f1e..71986169 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryContext.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryContext.java @@ -2,6 +2,7 @@ package com.aizuda.easy.retry.server.retry.task.support; import com.aizuda.easy.retry.server.common.dto.RegisterNodeInfo; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask; +import com.aizuda.easy.retry.template.datasource.persistence.po.SceneConfig; import java.util.Set; @@ -74,4 +75,10 @@ public interface RetryContext { */ Set getSceneBlacklist(); + /** + * 路由策略 + * + * @return 路由策略 + */ + SceneConfig sceneConfig(); } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/context/CallbackRetryContext.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/context/CallbackRetryContext.java index e3556118..369e0307 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/context/CallbackRetryContext.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/context/CallbackRetryContext.java @@ -4,6 +4,7 @@ import com.aizuda.easy.retry.server.common.dto.RegisterNodeInfo; import com.aizuda.easy.retry.server.retry.task.support.RetryContext; import com.aizuda.easy.retry.server.retry.task.support.WaitStrategy; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask; +import com.aizuda.easy.retry.template.datasource.persistence.po.SceneConfig; import lombok.Data; import java.util.Objects; @@ -47,9 +48,19 @@ public class CallbackRetryContext implements RetryContext { */ private RegisterNodeInfo serverNode; + /** + * 场景配置 + */ + private SceneConfig sceneConfig; + @Override public boolean hasException() { return Objects.nonNull(exception); } + @Override + public SceneConfig sceneConfig() { + return sceneConfig; + } + } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/context/MaxAttemptsPersistenceRetryContext.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/context/MaxAttemptsPersistenceRetryContext.java index 447dc076..b1e9b40e 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/context/MaxAttemptsPersistenceRetryContext.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/context/MaxAttemptsPersistenceRetryContext.java @@ -4,6 +4,7 @@ import com.aizuda.easy.retry.server.common.dto.RegisterNodeInfo; import com.aizuda.easy.retry.server.retry.task.support.RetryContext; import com.aizuda.easy.retry.server.retry.task.support.WaitStrategy; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask; +import com.aizuda.easy.retry.template.datasource.persistence.po.SceneConfig; import lombok.Data; import lombok.Getter; @@ -50,6 +51,11 @@ public class MaxAttemptsPersistenceRetryContext implements RetryContext { */ private RegisterNodeInfo serverNode; + /** + * 场景配置 + */ + private SceneConfig sceneConfig; + @Override public void setCallResult(V v) { this.callResult = v; @@ -64,4 +70,10 @@ public class MaxAttemptsPersistenceRetryContext implements RetryContext { public boolean hasException() { return Objects.nonNull(exception); } + + @Override + public SceneConfig sceneConfig() { + return sceneConfig; + } + } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java index 3ab40304..ceefcdeb 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java @@ -22,6 +22,7 @@ import com.aizuda.easy.retry.server.retry.task.support.retry.RetryExecutor; import com.aizuda.easy.retry.template.datasource.access.AccessTemplate; import com.aizuda.easy.retry.template.datasource.access.TaskAccess; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask; +import com.aizuda.easy.retry.template.datasource.persistence.po.SceneConfig; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import lombok.extern.slf4j.Slf4j; @@ -44,7 +45,7 @@ import java.util.concurrent.Callable; @Component(ActorGenerator.EXEC_CALLBACK_UNIT_ACTOR) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Slf4j -public class ExecCallbackUnitActor extends AbstractActor { +public class ExecCallbackUnitActor extends AbstractActor { @Autowired @Qualifier("bitSetIdempotentStrategyHandler") @@ -61,6 +62,7 @@ public class ExecCallbackUnitActor extends AbstractActor { CallbackRetryContext context = (CallbackRetryContext) retryExecutor.getRetryContext(); RetryTask retryTask = context.getRetryTask(); RegisterNodeInfo serverNode = context.getServerNode(); + SceneConfig sceneConfig = context.getSceneConfig(); RetryTaskLogDTO retryTaskLog = new RetryTaskLogDTO(); retryTaskLog.setGroupName(retryTask.getGroupName()); @@ -70,7 +72,7 @@ public class ExecCallbackUnitActor extends AbstractActor { if (Objects.nonNull(serverNode)) { retryExecutor.call((Callable>) () -> { - Result result = callClient(retryTask, serverNode); + Result result = callClient(retryTask, serverNode, sceneConfig); String message = "回调客户端成功"; if (StatusEnum.YES.getStatus() != result.getStatus()) { @@ -90,7 +92,7 @@ public class ExecCallbackUnitActor extends AbstractActor { retryTaskLog.setMessage("There are currently no available client PODs."); } - }catch (Exception e) { + } catch (Exception e) { LogUtils.error(log, "callback client error. retryTask:[{}]", JsonUtil.toJsonString(retryTask), e); retryTaskLog.setMessage(StringUtils.isBlank(e.getMessage()) ? StrUtil.EMPTY : e.getMessage()); } finally { @@ -114,15 +116,15 @@ public class ExecCallbackUnitActor extends AbstractActor { * @param callbackTask {@link RetryTask} 回调任务 * @return 重试结果返回值 */ - private Result callClient(RetryTask callbackTask, RegisterNodeInfo serverNode) { + private Result callClient(RetryTask callbackTask, RegisterNodeInfo serverNode, SceneConfig sceneConfig) { String retryTaskUniqueId = callbackRetryTaskHandler.getRetryTaskUniqueId(callbackTask.getUniqueId()); TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); RetryTask retryTask = retryTaskAccess.one(callbackTask.getGroupName(), - new LambdaQueryWrapper().eq(RetryTask::getUniqueId, retryTaskUniqueId)); + new LambdaQueryWrapper().eq(RetryTask::getUniqueId, retryTaskUniqueId)); Assert.notNull(retryTask, () -> new EasyRetryServerException("未查询回调任务对应的重试任务. callbackUniqueId:[{}] uniqueId:[{}]", - callbackTask.getUniqueId(), retryTaskUniqueId)); + callbackTask.getUniqueId(), retryTaskUniqueId)); // 回调参数 RetryCallbackDTO retryCallbackDTO = new RetryCallbackDTO(); @@ -136,17 +138,13 @@ public class ExecCallbackUnitActor extends AbstractActor { retryCallbackDTO.setUniqueId(callbackTask.getUniqueId()); RetryRpcClient rpcClient = RequestBuilder.newBuilder() - .hostPort(serverNode.getHostPort()) - .groupName(serverNode.getGroupName()) - .hostId(serverNode.getHostId()) - .hostIp(serverNode.getHostIp()) - .contextPath(serverNode.getContextPath()) - .client(RetryRpcClient.class) - .build(); - + .nodeInfo(serverNode) + .failover(Boolean.TRUE) + .routeKey(sceneConfig.getRouteKey()) + .allocKey(sceneConfig.getSceneName()) + .client(RetryRpcClient.class) + .build(); return rpcClient.callback(retryCallbackDTO); } - - } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecUnitActor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecUnitActor.java index c5c7b71a..12ad3ddf 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecUnitActor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecUnitActor.java @@ -21,6 +21,7 @@ import com.aizuda.easy.retry.server.retry.task.support.context.MaxAttemptsPersis import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO; import com.aizuda.easy.retry.server.retry.task.support.retry.RetryExecutor; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask; +import com.aizuda.easy.retry.template.datasource.persistence.po.SceneConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -42,7 +43,7 @@ import java.util.concurrent.Callable; @Component(ActorGenerator.EXEC_UNIT_ACTOR) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Slf4j -public class ExecUnitActor extends AbstractActor { +public class ExecUnitActor extends AbstractActor { @Autowired @Qualifier("bitSetIdempotentStrategyHandler") @@ -55,6 +56,7 @@ public class ExecUnitActor extends AbstractActor { MaxAttemptsPersistenceRetryContext context = (MaxAttemptsPersistenceRetryContext) retryExecutor.getRetryContext(); RetryTask retryTask = context.getRetryTask(); RegisterNodeInfo serverNode = context.getServerNode(); + SceneConfig sceneConfig = context.getSceneConfig(); RetryTaskLogDTO retryTaskLog = new RetryTaskLogDTO(); retryTaskLog.setGroupName(retryTask.getGroupName()); @@ -67,7 +69,7 @@ public class ExecUnitActor extends AbstractActor { retryExecutor.call((Callable>) () -> { - Result result = callClient(retryTask, serverNode); + Result result = callClient(retryTask, serverNode, sceneConfig); // 回调接口请求成功,处理返回值 if (StatusEnum.YES.getStatus() != result.getStatus()) { @@ -106,7 +108,7 @@ public class ExecUnitActor extends AbstractActor { retryTaskLog.setMessage("There are currently no available client PODs."); } - }catch (Exception e) { + } catch (Exception e) { LogUtils.error(log, "callback client error. retryTask:[{}]", JsonUtil.toJsonString(retryTask), e); retryTaskLog.setMessage(e.getMessage()); } finally { @@ -128,7 +130,7 @@ public class ExecUnitActor extends AbstractActor { * @param retryTask {@link RetryTask} 需要重试的数据 * @return 重试结果返回值 */ - private Result callClient(RetryTask retryTask, RegisterNodeInfo serverNode) { + private Result callClient(RetryTask retryTask, RegisterNodeInfo serverNode, SceneConfig sceneConfig) { DispatchRetryDTO dispatchRetryDTO = new DispatchRetryDTO(); dispatchRetryDTO.setIdempotentId(retryTask.getIdempotentId()); @@ -139,20 +141,17 @@ public class ExecUnitActor extends AbstractActor { dispatchRetryDTO.setRetryCount(retryTask.getRetryCount()); // 设置header - HttpHeaders requestHeaders = new HttpHeaders(); EasyRetryHeaders easyRetryHeaders = new EasyRetryHeaders(); easyRetryHeaders.setEasyRetry(Boolean.TRUE); easyRetryHeaders.setEasyRetryId(retryTask.getUniqueId()); - requestHeaders.add(SystemConstants.EASY_RETRY_HEAD_KEY, JsonUtil.toJsonString(easyRetryHeaders)); RetryRpcClient rpcClient = RequestBuilder.newBuilder() - .hostPort(serverNode.getHostPort()) - .groupName(serverNode.getGroupName()) - .hostId(serverNode.getHostId()) - .hostIp(serverNode.getHostIp()) - .contextPath(serverNode.getContextPath()) - .client(RetryRpcClient.class) - .build(); + .nodeInfo(serverNode) + .failover(Boolean.TRUE) + .allocKey(retryTask.getSceneName()) + .routeKey(sceneConfig.getRouteKey()) + .client(RetryRpcClient.class) + .build(); return rpcClient.dispatch(dispatchRetryDTO, easyRetryHeaders); } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/CallbackTaskExecutor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/CallbackTaskExecutor.java index e7c0c80d..cf26d555 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/CallbackTaskExecutor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/CallbackTaskExecutor.java @@ -35,6 +35,7 @@ public class CallbackTaskExecutor extends AbstractTaskExecutor { retryContext.setServerNode( clientNodeAllocateHandler.getServerNode(retryTask.getSceneName(), retryTask.getGroupName(), sceneConfig.getRouteKey())); + retryContext.setSceneConfig(sceneConfig); return retryContext; } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/ManualCallbackTaskExecutor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/ManualCallbackTaskExecutor.java index 1d922c8b..12ab4111 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/ManualCallbackTaskExecutor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/ManualCallbackTaskExecutor.java @@ -38,6 +38,7 @@ public class ManualCallbackTaskExecutor extends AbstractTaskExecutor { retryContext.setServerNode( clientNodeAllocateHandler.getServerNode(retryTask.getSceneName(), retryTask.getGroupName(), sceneConfig.getRouteKey())); + retryContext.setSceneConfig(sceneConfig); return retryContext; } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/ManualRetryTaskExecutor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/ManualRetryTaskExecutor.java index 784ed9ca..1f27b828 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/ManualRetryTaskExecutor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/ManualRetryTaskExecutor.java @@ -38,7 +38,9 @@ public class ManualRetryTaskExecutor extends AbstractTaskExecutor { retryContext.setSceneBlacklist(accessTemplate.getSceneConfigAccess().getBlacklist(groupName)); retryContext.setServerNode( clientNodeAllocateHandler.getServerNode(retryTask.getSceneName(), retryTask.getGroupName(), - sceneConfig.getRouteKey())); return retryContext; + sceneConfig.getRouteKey())); + retryContext.setSceneConfig(sceneConfig); + return retryContext; } @Override diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/RetryTaskExecutor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/RetryTaskExecutor.java index bef00d12..7f0c5c03 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/RetryTaskExecutor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/task/RetryTaskExecutor.java @@ -36,6 +36,7 @@ public class RetryTaskExecutor extends AbstractTaskExecutor { retryContext.setServerNode( clientNodeAllocateHandler.getServerNode(retryTask.getSceneName(), retryTask.getGroupName(), sceneConfig.getRouteKey())); + retryContext.setSceneConfig(sceneConfig); return retryContext; } @@ -43,7 +44,6 @@ public class RetryTaskExecutor extends AbstractTaskExecutor { protected RetryExecutor> builderResultRetryExecutor(RetryContext retryContext, final SceneConfig sceneConfig) { - RetryTask retryTask = retryContext.getRetryTask(); return RetryBuilder.>newBuilder() .withStopStrategy(StopStrategies.stopException()) .withStopStrategy(StopStrategies.stopResultStatusCode()) diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskServiceImpl.java index 15ef74de..b134fd7e 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskServiceImpl.java @@ -226,11 +226,7 @@ public class RetryTaskServiceImpl implements RetryTaskService { generateRetryIdempotentIdDTO.setExecutorName(generateRetryIdempotentIdVO.getExecutorName()); RetryRpcClient rpcClient = RequestBuilder.newBuilder() - .hostPort(serverNode.getHostPort()) - .groupName(serverNode.getGroupName()) - .hostId(serverNode.getHostId()) - .hostIp(serverNode.getHostIp()) - .contextPath(serverNode.getContextPath()) + .nodeInfo(serverNode) .client(RetryRpcClient.class) .build(); diff --git a/frontend/src/api/jobApi.js b/frontend/src/api/jobApi.js index 316d2172..cde1315c 100644 --- a/frontend/src/api/jobApi.js +++ b/frontend/src/api/jobApi.js @@ -8,12 +8,33 @@ const jobApi = { // 任务批次 jobBatchList: '/job/batch/list', - jobBatchDetail: '/job/batch/' + jobBatchDetail: '/job/batch/', + // 任务 + jobTaskList: '/job/task/list', + + // 日志 + jobLogList: '/job/log/list' } export default jobApi +export function jobLogList (parameter) { + return request({ + url: jobApi.jobLogList, + method: 'get', + params: parameter + }) +} + +export function jobTaskList (parameter) { + return request({ + url: jobApi.jobTaskList, + method: 'get', + params: parameter + }) +} + export function jobBatchList (parameter) { return request({ url: jobApi.jobBatchList, diff --git a/frontend/src/config/router.config.js b/frontend/src/config/router.config.js index a142f622..48791071 100644 --- a/frontend/src/config/router.config.js +++ b/frontend/src/config/router.config.js @@ -143,15 +143,30 @@ export const asyncRouterMap = [ }, { path: '/job/batch/list', - name: 'JobBatch', - component: () => import('@/views/job/JobBatch'), + name: 'JobBatchList', + component: () => import('@/views/job/JobBatchList'), meta: { title: '任务批次', icon: 'profile', permission: ['retryLog'] } }, + { + path: '/job/batch/info', + name: 'JobBatchInfo', + hidden: true, + component: () => import('@/views/job/JobBatchInfo'), + meta: { title: '任务批次详情', icon: 'profile', permission: ['retryLog'] } + }, { path: '/job/task/list', - name: 'JobTask', - component: () => import('@/views/job/JobTask'), + name: 'JobTaskList', + hidden: true, + component: () => import('@/views/job/JobTaskList'), meta: { title: '任务项', icon: 'profile', permission: ['retryLog'] } + }, + { + path: '/job/log/list', + name: 'JobLogMessageList', + hidden: true, + component: () => import('@/views/job/JobLogMessageList'), + meta: { title: '任务调度日志', icon: 'profile', permission: ['retryLog'] } } ] }, diff --git a/frontend/src/utils/enum.js b/frontend/src/utils/enum.js new file mode 100644 index 00000000..88aad398 --- /dev/null +++ b/frontend/src/utils/enum.js @@ -0,0 +1,149 @@ +const enums = { + jobStatusEnum: { + '0': { + 'name': '关闭', + 'color': '#9c1f1f' + }, + '1': { + 'name': '开启', + 'color': '#f5a22d' + } + }, + taskType: { + '1': { + 'name': '集群模式', + 'color': '#d06892' + }, + '2': { + 'name': '广播模式', + 'color': '#f5a22d' + }, + '3': { + 'name': '分片模式', + 'color': '#e1f52d' + } + }, + triggerType: { + '1': { + 'name': 'CRON表达式', + 'color': '#d06892' + }, + '2': { + 'name': '固定时间', + 'color': '#f5a22d' + } + }, + blockStrategy: { + '1': { + 'name': '丢弃策略', + 'color': '#d06892' + }, + '2': { + 'name': '覆盖', + 'color': '#f5a22d' + }, + '3': { + 'name': '并行', + 'color': '#e1f52d' + } + }, + executorType: { + '1': { + 'name': 'Java', + 'color': '#d06892' + } + }, + routeKey: { + '4': { + 'name': '轮询', + 'color': '#8f68d2' + }, + '1': { + 'name': '一致性Hash', + 'color': '#d06892' + }, + '2': { + 'name': '随机', + 'color': '#f5a22d' + }, + '3': { + 'name': 'LRU', + 'color': '#e1f52d' + } + }, + taskStatus: { + '1': { + 'name': '待处理', + 'color': '#64a6ea' + }, + '2': { + 'name': '运行中', + 'color': '#1b7ee5' + }, + '3': { + 'name': '成功', + 'color': '#087da1' + }, + '4': { + 'name': '失败', + 'color': '#f52d80' + }, + '5': { + 'name': '停止', + 'color': '#ac2df5' + }, + '6': { + 'name': '取消', + 'color': '#f5732d' + } + }, + operationReason: { + '0': { + 'name': '' + }, + '1': { + 'name': '执行超时', + 'color': '#64a6ea' + }, + '2': { + 'name': '无客户端节点', + 'color': '#1b7ee5' + }, + '3': { + 'name': '任务已关闭', + 'color': '#087da1' + } + // '4': { + // 'name': '失败', + // 'color': '#f52d80' + // }, + // '5': { + // 'name': '停止', + // 'color': '#ac2df5' + // }, + // '6': { + // 'name': '取消', + // 'color': '#f5732d' + // } + }, + executeStatus: { + '2': { + 'name': '运行中', + 'color': '#1b7ee5' + }, + '3': { + 'name': '成功', + 'color': '#087da1' + }, + '4': { + 'name': '失败', + 'color': '#f52d80' + }, + '5': { + 'name': '停止', + 'color': '#ac2df5' + } + } +} + +module.exports = enums diff --git a/frontend/src/views/job/JobBatchInfo.vue b/frontend/src/views/job/JobBatchInfo.vue new file mode 100644 index 00000000..8aa0e44d --- /dev/null +++ b/frontend/src/views/job/JobBatchInfo.vue @@ -0,0 +1,80 @@ + + + $router.go(-1)" style="margin: -24px -1px 0"> + + + + + + {{ jobBatchInfo.groupName }} + + + {{ jobBatchInfo.jobName }} + + + + {{ taskStatus[jobBatchInfo.taskStatus].name }} + + + + {{ jobBatchInfo.updateDt }} + + + {{ jobBatchInfo.executorName }} + + + + + 任务项列表 + + + + + + + + diff --git a/frontend/src/views/job/JobBatch.vue b/frontend/src/views/job/JobBatchList.vue similarity index 80% rename from frontend/src/views/job/JobBatch.vue rename to frontend/src/views/job/JobBatchList.vue index 64004ec2..48c68c49 100644 --- a/frontend/src/views/job/JobBatch.vue +++ b/frontend/src/views/job/JobBatchList.vue @@ -66,8 +66,6 @@ - 新增 - 删除 @@ -89,31 +87,13 @@ {{ record.id }} - - - {{ taskType[text].name }} - - {{ taskStatus[text].name }} - - - {{ triggerType[text].name }} - - - - - {{ blockStrategy[text].name }} - - - - {{ text }}(秒) - - - {{ text }}(秒) + + {{ operationReason[text].name }} @@ -168,9 +148,10 @@ import AInput from 'ant-design-vue/es/input/Input' import { STable } from '@/components' import { jobBatchList } from '@/api/jobApi' import { getAllGroupNameList } from '@/api/manage' +const enums = require('@/utils/enum') export default { - name: 'JobList', + name: 'JobBatchList', components: { AInput, ATextarea, @@ -186,54 +167,8 @@ export default { advanced: false, // 查询参数 queryParam: {}, - jobStatus: { - '0': { - 'name': '关闭', - 'color': '#9c1f1f' - }, - '1': { - 'name': '开启', - 'color': '#f5a22d' - } - }, - taskType: { - '1': { - 'name': '集群模式', - 'color': '#d06892' - }, - '2': { - 'name': '广播模式', - 'color': '#f5a22d' - }, - '3': { - 'name': '分片模式', - 'color': '#e1f52d' - } - }, - triggerType: { - '1': { - 'name': 'CRON表达式', - 'color': '#d06892' - }, - '2': { - 'name': '固定时间', - 'color': '#f5a22d' - } - }, - blockStrategy: { - '1': { - 'name': '丢弃策略', - 'color': '#d06892' - }, - '2': { - 'name': '覆盖', - 'color': '#f5a22d' - }, - '3': { - 'name': '并行', - 'color': '#e1f52d' - } - }, + taskStatus: enums.taskStatus, + operationReason: enums.operationReason, // 表头 columns: [ { @@ -242,42 +177,27 @@ export default { }, { title: '组名称', - dataIndex: 'groupName' - }, - { - title: '任务名称', - dataIndex: 'jobName', + dataIndex: 'groupName', ellipsis: true }, + // { + // title: '任务名称', + // dataIndex: 'jobName', + // ellipsis: true + // }, { title: '状态', dataIndex: 'taskStatus', scopedSlots: { customRender: 'taskStatus' } }, { - title: '任务类型', - dataIndex: 'taskType', - scopedSlots: { customRender: 'taskType' } + title: '开始执行时间', + dataIndex: 'executionAt' }, { - title: '触发类型', - dataIndex: 'triggerType', - scopedSlots: { customRender: 'triggerType' } - }, - { - title: '间隔时长', - dataIndex: 'triggerInterval', - scopedSlots: { customRender: 'triggerInterval' } - }, - { - title: '阻塞策略', - dataIndex: 'blockStrategy', - scopedSlots: { customRender: 'blockStrategy' } - }, - { - title: '超时时间', - dataIndex: 'executorTimeout', - scopedSlots: { customRender: 'executorTimeout' } + title: '操作原因', + dataIndex: 'operationReason', + scopedSlots: { customRender: 'operationReason' } }, { title: '创建时间', @@ -343,7 +263,7 @@ export default { this.advanced = !this.advanced }, handleInfo (record) { - this.$router.push({ path: '/job/info', query: { id: record.id, groupName: record.groupName } }) + this.$router.push({ path: '/job/batch/info', query: { id: record.id, groupName: record.groupName } }) }, handleOk (record) {}, handleSuspend (record) { diff --git a/frontend/src/views/job/JobInfo.vue b/frontend/src/views/job/JobInfo.vue index 71c3e800..a6262201 100644 --- a/frontend/src/views/job/JobInfo.vue +++ b/frontend/src/views/job/JobInfo.vue @@ -4,25 +4,58 @@ - + {{ jobInfo.groupName }} {{ jobInfo.jobName }} - - {{ jobInfo.retryCount }} - - - - {{ retryStatus[jobInfo.retryStatus] }} + + + {{ triggerType[jobInfo.triggerType].name }} - + + + {{ jobInfo.triggerInterval }} + + + {{ jobInfo.maxRetryTimes }}次 + + + {{ jobInfo.retryInterval }}(秒) + + + {{ jobInfo.parallelNum }} + + + + {{ routeKey[jobInfo.routeKey].name }} + + + + + {{ executorType[jobInfo.executorType].name }} + + + {{ taskType[jobInfo.taskType].name }} + + + {{ blockStrategy[jobInfo.blockStrategy].name }} + + + + + {{ jobStatusEnum[jobInfo.jobStatus].name }} + + + + {{ jobInfo.executorTimeout }}(秒) + {{ jobInfo.nextTriggerAt }} @@ -46,6 +79,7 @@ + + diff --git a/frontend/src/views/job/JobTask.vue b/frontend/src/views/job/JobTask.vue deleted file mode 100644 index f21a3a14..00000000 --- a/frontend/src/views/job/JobTask.vue +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - - - handleChange(value)" - > - {{ item }} - - - - - - - - {{ item.sceneName }} - - - - - - - - {{ index.name }} - - - - - - - - - - - - - - - - - - - - - - - 查询 - (queryParam = {})">重置 - - {{ advanced ? '收起' : '展开' }} - - - - - - - - - 新增 - - - - 删除 - 更新 - - 批量操作 - - - - - - {{ record.id }} - - - - {{ taskType[text].name }} - - - - - {{ jobStatus[text].name }} - - - - - {{ triggerType[text].name }} - - - - - {{ blockStrategy[text].name }} - - - - {{ text }}(秒) - - - {{ text }}(秒) - - - - 详情 - - - 暂停 - - - - 恢复 - - - - 完成 - - - - 执行 - - - - - - - - - - diff --git a/frontend/src/views/job/JobTaskList.vue b/frontend/src/views/job/JobTaskList.vue new file mode 100644 index 00000000..50d45096 --- /dev/null +++ b/frontend/src/views/job/JobTaskList.vue @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 删除 + 更新 + + 批量操作 + + + + + + {{ record.id }} + + + + {{ executeStatus[text].name }} + + + + 执行结果: {{ record.resultMessage }} + 参数: {{ record.argsStr }} + + + + 日志 + + + + + + + +
+ 执行结果: {{ record.resultMessage }} + 参数: {{ record.argsStr }} +