有关 Commander 中任务入队和出队的解释

检索关键字:任务调度,排队执行,优先执行,Worker怎么执行任务


环境

  • 适用于 Commander 5.0及以上版本

  • 适用于 Worker 5.0及以上版本

任务入队

当前基于 Commander 的机制创建任务有3种方式:新建任务、新建计划、OpenAPI,且此3种方式创建的任务进入任务队列的路线规则是一样的,如下图: 创建任务入队

  • 创建任务需要“部门”、“流程”、“分配Worker”三要素,每个要素确定后即可决定被创建的任务由哪条路线压入任务队列。
  • 在“分配Worker”中有2种分配方式:自动分配、指定Worker,这2种分配方式会对应2组任务队列,如“自动分配”会对应所选“部门”的这一组的任务队列,如“指定Worker”会对应已选择的Worker的这一组任务队列;这2种分配方式有相同的2种执行方式,也可理解成执行的优先级,“立即执行”的任务队列的优先级要高于“排队执行”的任务队列,优先级越高则优先执行。
  • 创建任务时,Commander内部会为每个无人值守型Worker创建2个独立的任务队列:高优先级的”立即执行“任务队列、低优先级的”排队执行“任务队列;为流程所在的部门创建2个独立的任务队列:高优先级的”立即执行“任务队列、低优先级的”排队执行“任务队列。

任务出队

无人值守型Worker会基于自身的事件驱动机制,主动从Commander的任务队列中拉取任务,如下图:

拉取任务

主动拉取任务时会遵循特定的优先级规则,首先满足基本的优先顺序:

  • 分配方式的优先顺序为:指定Worker>自动分配Worker
  • 执行方式的优先顺序为:立即执行>排队执行
  • 无人值守型Worker归属的多个部门的遍历优先顺序为:在”新建Worker“时选择授权部门时,先选择的部门 > 后续选择的部门,最后选择的部门优先级最低,最先选择的部门优先级最高

再者组合起来(实际执行时)的优先顺序:

  1. 首先检查Worker自身对应的“指定Worker和立即执行”的任务队列(仅1个),队头存在待执行任务则返回此任务,若无则到下一步;
  2. 检查“自动分配Worker且立即执行”的任务队列(存在N>=1个) ,即遍历当前Worker所归属的所有部门对应的高优先级的“立即执行“队列,根据多个部门的优先级规则,能在某部门的”立即执行“任务队列的队头找到待执行任务,则返回此任务,如果所有部门都没有,则到下一步;
  3. 检查Worker自身对应的“指定Worker且排队执行” 的任务队列(仅1个),队头存在待执行任务则返回此任务,若无则到下一步;
  4. 检查“自动分配Worker且排队执行”的任务队列(存在N>=1个),即遍历当前Worker所归属的所有部门对应的低优先级的“排队执行“队列,根据多个部门的优先级规则,能在某部门的”排队执行“任务队列的队头找到待执行任务,则返回此任务,如果所有部门都没有,则到下一步;
  5. 此时当前Worker没有待执行任务,状态为空闲,等待Commander发起广播从而触发当前Worker的事件驱动机制。
最后更新于 18th Dec 2020