From cd3ec5f7815e0237515c82aa896be60685b65335 Mon Sep 17 00:00:00 2001 From: opensnail <598092184@qq.com> Date: Tue, 7 May 2024 18:44:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(sj=5F1.0.0):=201=E3=80=81=20=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1=E5=91=8A=E8=AD=A6=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E5=8E=9F=E5=9B=A0=202=E3=80=81=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E5=A4=B1=E8=B4=A5=E5=9C=BA=E6=99=AF=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/enums/JobNotifySceneEnum.java | 7 ++---- .../core/enums/JobOperationReasonEnum.java | 7 ++++++ .../server/common/alarm/AbstractAlarm.java | 12 +++++++++- .../server/common/dto/JobAlarmInfo.java | 9 +++++++- .../listener/JobTaskFailAlarmListener.java | 23 +++++++++++-------- .../block/job/DiscardBlockStrategy.java | 2 -- .../support/dispatch/JobExecutorActor.java | 4 ++++ .../executor/job/RequestClientActor.java | 12 ++++++---- .../prepare/job/RunningJobPrepareHandler.java | 3 +++ .../stop/AbstractJobTaskStopHandler.java | 2 ++ 10 files changed, 58 insertions(+), 23 deletions(-) diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/JobNotifySceneEnum.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/JobNotifySceneEnum.java index 2a10c27f..006fa7e6 100644 --- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/JobNotifySceneEnum.java +++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/JobNotifySceneEnum.java @@ -13,13 +13,10 @@ public enum JobNotifySceneEnum { /********************************Job****************************************/ JOB_TASK_ERROR(1, "JOB任务执行失败", NodeTypeEnum.SERVER), - + JOB_CLIENT_ERROR(2, "客户端执行失败", NodeTypeEnum.CLIENT), /********************************Workflow****************************************/ - WORKFLOW_TASK_ERROR(100, "Workflow任务执行失败", NodeTypeEnum.SERVER), - WORKFLOW_TASK_CALLBACK_ERROR(101, "回调节点任务执行失败", NodeTypeEnum.SERVER), - WORKFLOW_TASK_DECISION_ERROR(102, "判定节点任务执行失败", NodeTypeEnum.SERVER), - + WORKFLOW_TASK_ERROR(100, "Workflow任务执行失败", NodeTypeEnum.SERVER) ; /** diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/JobOperationReasonEnum.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/JobOperationReasonEnum.java index 95e0263a..f56146ab 100644 --- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/JobOperationReasonEnum.java +++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/JobOperationReasonEnum.java @@ -6,6 +6,7 @@ import lombok.Getter; import java.util.Arrays; import java.util.List; +import java.util.Objects; /** * 标识某个操作的具体原因 @@ -47,4 +48,10 @@ public enum JobOperationReasonEnum { WORKFLOW_NODE_NO_REQUIRED.getReason(), WORKFLOW_DECISION_FAILED.getReason(), WORKFLOW_CONDITION_NODE_EXECUTION_ERROR.getReason()); + public static JobOperationReasonEnum getByReason(Integer reason) { + if (Objects.isNull(reason)) { + return NONE; + } + return Arrays.stream(values()).filter(e -> reason.equals(e.reason)).findFirst().orElse(NONE); + } } diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractAlarm.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractAlarm.java index 8b7dd9a1..f773bd0f 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractAlarm.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractAlarm.java @@ -25,11 +25,14 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.common.util.concurrent.RateLimiter; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.scheduling.TaskScheduler; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalApplicationListener; import org.springframework.util.CollectionUtils; import java.time.Duration; @@ -43,7 +46,8 @@ import java.util.stream.Collectors; * @since 2.5.0 */ @Slf4j -public abstract class AbstractAlarm implements ApplicationListener, +public abstract class AbstractAlarm implements + TransactionalApplicationListener, Runnable, Lifecycle { @@ -218,6 +222,12 @@ public abstract class AbstractAlarm 组名称:{} \s > 任务名称:{} \s > 执行器名称:{} \s + > 失败原因:{} \s > 方法参数:{} \s > 时间:{}; """; @@ -72,17 +75,19 @@ public class JobTaskFailAlarmListener extends AbstractJobAlarm new SnailJobServerException("更新任务失败")); + if (JobTaskBatchStatusEnum.NOT_SUCCESS.contains(taskStatus)) { + SpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(taskExecute.getTaskBatchId())); + } + } private void doHandlerResidentTask(Job job, TaskExecuteDTO taskExecuteDTO) { diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/executor/job/RequestClientActor.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/executor/job/RequestClientActor.java index c84d2a1c..0a7701ed 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/executor/job/RequestClientActor.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/executor/job/RequestClientActor.java @@ -4,6 +4,7 @@ import akka.actor.AbstractActor; import akka.actor.ActorRef; import com.aizuda.snailjob.client.model.ExecuteResult; import com.aizuda.snailjob.client.model.request.DispatchJobRequest; +import com.aizuda.snailjob.common.core.context.SpringContext; import com.aizuda.snailjob.common.core.enums.JobTaskStatusEnum; import com.aizuda.snailjob.common.core.enums.StatusEnum; import com.aizuda.snailjob.common.log.SnailJobLog; @@ -19,6 +20,7 @@ import com.aizuda.snailjob.server.common.dto.JobLogMetaDTO; import com.aizuda.snailjob.server.job.task.dto.RealJobExecutorDTO; import com.aizuda.snailjob.server.job.task.support.ClientCallbackHandler; import com.aizuda.snailjob.server.job.task.support.JobTaskConverter; +import com.aizuda.snailjob.server.job.task.support.alarm.event.JobTaskFailAlarmEvent; import com.aizuda.snailjob.server.job.task.support.callback.ClientCallbackContext; import com.aizuda.snailjob.server.job.task.support.callback.ClientCallbackFactory; import com.github.rholder.retry.Attempt; @@ -92,15 +94,15 @@ public class RequestClientActor extends AbstractActor { } } catch (Exception e) { - Throwable throwable = e; + Throwable throwable; if (e.getClass().isAssignableFrom(RetryException.class)) { RetryException re = (RetryException) e; throwable = re.getLastFailedAttempt().getExceptionCause(); - } - - if (e.getClass().isAssignableFrom(UndeclaredThrowableException.class)) { + } else if (e.getClass().isAssignableFrom(UndeclaredThrowableException.class)) { UndeclaredThrowableException re = (UndeclaredThrowableException) e; throwable = re.getUndeclaredThrowable(); + } else { + throwable = e; } JobLogMetaDTO jobLogMetaDTO = JobTaskConverter.INSTANCE.toJobLogDTO(realJobExecutorDTO); @@ -114,7 +116,7 @@ public class RequestClientActor extends AbstractActor { } taskExecuteFailure(realJobExecutorDTO, throwable.getMessage()); - + SpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(dispatchJobRequest.getTaskBatchId())); } } diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/prepare/job/RunningJobPrepareHandler.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/prepare/job/RunningJobPrepareHandler.java index 8d021f0e..28177720 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/prepare/job/RunningJobPrepareHandler.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/prepare/job/RunningJobPrepareHandler.java @@ -1,5 +1,6 @@ package com.aizuda.snailjob.server.job.task.support.prepare.job; +import com.aizuda.snailjob.common.core.context.SpringContext; import com.aizuda.snailjob.common.core.enums.JobOperationReasonEnum; import com.aizuda.snailjob.common.core.enums.JobTaskBatchStatusEnum; import com.aizuda.snailjob.common.core.util.JsonUtil; @@ -9,6 +10,7 @@ import com.aizuda.snailjob.server.job.task.support.BlockStrategy; import com.aizuda.snailjob.server.job.task.support.JobTaskConverter; import com.aizuda.snailjob.server.job.task.dto.JobTaskPrepareDTO; import com.aizuda.snailjob.server.job.task.support.JobTaskStopHandler; +import com.aizuda.snailjob.server.job.task.support.alarm.event.JobTaskFailAlarmEvent; import com.aizuda.snailjob.server.job.task.support.block.job.BlockStrategyContext; import com.aizuda.snailjob.server.job.task.support.block.job.JobBlockStrategyFactory; import com.aizuda.snailjob.server.job.task.support.stop.JobTaskStopFactory; @@ -62,6 +64,7 @@ public class RunningJobPrepareHandler extends AbstractJobPrePareHandler { stopJobContext.setJobOperationReason(JobOperationReasonEnum.TASK_EXECUTION_TIMEOUT.getReason()); stopJobContext.setNeedUpdateTaskStatus(Boolean.TRUE); instanceInterrupt.stop(stopJobContext); + SpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(prepare.getTaskBatchId())); } } diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/stop/AbstractJobTaskStopHandler.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/stop/AbstractJobTaskStopHandler.java index 7fd2b769..6761e26c 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/stop/AbstractJobTaskStopHandler.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/stop/AbstractJobTaskStopHandler.java @@ -1,12 +1,14 @@ package com.aizuda.snailjob.server.job.task.support.stop; import akka.actor.ActorRef; +import com.aizuda.snailjob.common.core.context.SpringContext; import com.aizuda.snailjob.common.core.enums.JobTaskBatchStatusEnum; import com.aizuda.snailjob.common.core.enums.JobTaskStatusEnum; import com.aizuda.snailjob.server.common.akka.ActorGenerator; import com.aizuda.snailjob.server.job.task.support.JobTaskConverter; import com.aizuda.snailjob.server.job.task.dto.JobExecutorResultDTO; import com.aizuda.snailjob.server.job.task.support.JobTaskStopHandler; +import com.aizuda.snailjob.server.job.task.support.alarm.event.JobTaskFailAlarmEvent; import com.aizuda.snailjob.template.datasource.persistence.mapper.JobTaskBatchMapper; import com.aizuda.snailjob.template.datasource.persistence.mapper.JobTaskMapper; import com.aizuda.snailjob.template.datasource.persistence.po.JobTask;