Netflix Conductor 源码分析——系统任务

本系列基于 Conductor release v3.5.2

1. 概述

系统任务是 Conductor 内部执行的任务,不需要 Worker 来实行执行。本文介绍系统任务(HTTP,EVENT,INLINE,JQ)如何被执行。注:不包含系统操作符Switch,DoWhile,SetVariable

2.WorkflowSystemTask

所有的系统任务都继承WorkflowSystemTask。在 Conductor 系统启动时SystemTaskRegistry所有WorkflowSystemTask加载进来,后续可以通过SystemTaskRegistry#isSystemTask方法判断是否为系统任务从而执行系统任务逻辑。

WorkflowSystemTask#start

Start the task execution.
Called only once, and first, when the task status is SCHEDULED.

第一次执行任务时调用,且只调用一次

WorkflowSystemTask#execute

"Execute" the task.
Called after {@link #start(WorkflowModel, TaskModel, WorkflowExecutor)}, if the task
status is not terminal. Can be called more than once.

在start方法后执行,可以被执行多次

3.调用过程

入口WorkflowExecutor#decide。在该方法里,根据workflowId获取接下来要调度的任务。
1327行 stateChanged = scheduleTask(workflow, tasksToBeScheduled) || stateChanged;
scheduleTask 方法时执行调度逻辑。
1715行 List<TaskModel> systemTasks = tasks.stream() .filter(task -> systemTaskRegistry.isSystemTask(task.getTaskType())) .collect(Collectors.toList());
把系统任务过滤出来,并在1740行执行workflowSystemTask.start(workflow, task, this);

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容