文档

流程定义介绍

更新时间:

本文介绍云工作流的流程定义语言的基础知识和相关使用示例等。

基础知识

云工作流使用YAML格式的流程定义语言来描述和定义业务逻辑。在执行流程时,云工作流服务会根据流程定义解析并驱动执行相关状态流转。

一个流程(Flow)通常包含若干状态(State),这些状态可以是简单的原子状态,例如集成任务(Task)、成功(Succeed)、失败(Fail)、等待(Wait)和传递(Pass)等;也可以是复杂的控制状态,例如选择(Choice)、并行(Parallel)和循环(Map)等。这些状态可以组合嵌套使用,以构建复杂的业务逻辑,例如,一个并行状态的分支可以是一个选择状态。

流程中的状态执行可能出现错误,云工作流提供OnError错误处理能力,支持错误重试或错误流转到其他状态。

云工作流的状态类似于编程语言中的函数,组合类似于函数调用。状态之间通过输入(Input)和输出(Output)传递数据,每个状态由上下文(Context)变量保存数据。状态间可以组合嵌套,如果一个状态包含另一个状态,则称外层状态为内部状态的作用域(Scope)。

定义流程时,您可以使用以下状态。

  • 任务(Task):通过任务(Task)状态调用工作流集成提供的服务。

  • 传递(Pass):通过传递(Pass)状态做占位符规划流程基本结构。

  • 等待(Wait):如果需要等待一段时间,可以通过等待(Wait)状态暂停流程的执行。

  • 选择(Choice):通过选择(Choice)状态定义不同执行路径。

  • 并行(Parallel):通过并行(Parallel)状态并行执行多个分支,这些分支共享同一份输入。

  • 循环(Map):通过循环(Map)状态并行处理数组数据。

  • 成功(Succeed):通过成功(Succeed)状态提前终止流程。

  • 失败(Fail):通过失败(Fail)状态提前终止流程。

流程属性

流程包含以下属性。

字段

类型

是否必选

描述

示例值

Type

String

流程定义DSL类型。

StateMachine

SpecVersion

String

Spec版本。

v1

States

Array

内部嵌套的状态数组。

详见示例

StartAt

String

内部嵌套状态数组的执行起点。

my start task

Name

String

流程名称。

my-wkfl

Description

String

流程描述。

test workflow definition

Timeout

Int

超时时间。

600

状态通用属性

所有状态包含的通用属性。

字段

类型

是否必选

描述

示例值

Name

string

状态名称。

my-state-name

Description

string

状态描述。

describe it here

Type

string

状态类型。

Task

Next

string

当前状态的下一个状态。当End取值为true时,无需指定。

my-next-state

End

bool

是否为当前作用域的终结节点。

true

重要

YAML格式的同一个流程定义中,字段Name的值不能重复,包括代表流程名称的Name和代表状态名称的Name。

状态作用域

云工作流的状态(State)之间可以组合嵌套,作用域则是支撑复杂逻辑嵌套的基础。如果一个状态包含另一个状态,则称外层状态为作用域。如果两个状态为同级状态,则这两个状态的作用域相同。 我们将通过如下示例介绍流程的作用域概念:

Type: StateMachine  
Name: my-wkfl  
SpecVersion: v1
StartAt: Parallel1  
States:  
  - Type: Parallel  
    Name: Parallel1  
    Next: Pass4  
    Branches:  
      - StartAt: Pass1  
        States:  
          - Type: Pass  
            Name: Pass1  
            Next: Pass2  
            OutputConstructor:  
              FieldA: 123   
          - Type: Pass  
            Name: Pass2  
            End: true  
      - StartAt: Pass3  
        States:  
          - Type: Pass  
            InputConstructor:  
              FieldA: 321  
            Name: Pass3  
            End: true  
  - Type: Pass  
    Name: Pass4  
    End: true

本示例中的作用域划分如下。

  • Parallel1与Pass4属于同一个作用域,即my-wkfl。

  • ParallelBranch #0与ParallelBranch #1属于同一个作用域,即Parallel1。

  • Pass1与Pass2属于同一个作用域,即ParallelBranch #0。

本示例与成功状态和失败状态示例类似,运行至End属性状态,会将自身所处的作用域状态标记为完成。具体信息如下。

  • Pass2完成后,ParallelBranch #0被标记为完成。

  • 当某些时刻ParallelBranch #0和ParallelBranch #1陆续完成,Parallel1被标记为完成。

  • Pass4完结后,my-wkfl被标记为完成。

流程示例

示例一

以下示例流程包含一个任务状态,这个状态为一个Pass状态,实际不执行任何操作。

Type: StateMachine
Name: my-wkfl
Description: test workflow definition
SpecVersion: v1
Timeout: 600
StartAt: Pass
States:
  - Type: Pass
    Name: Pass
    End: true

示例二

以下示例流程包含三个状态,Pass1、Parallel1和Pass4。

整体流程从Pass1开始执行,然后指向Parallel1。其中Parallel1又包含了两个分支,Pass2和Pass3,Pass2和Pass3也分别为分支执行起始状态。Parallel1执行完毕后指向Pass4,并最终结束整个流程。

Type: StateMachine
Name: my-wkfl
SpecVersion: v1
StartAt: Pass1
States:
  - Type: Pass
    Name: Pass1
    Next: Parallel1
  - Type: Parallel
    Name: Parallel1
    Next: Pass4
    Branches:
      - StartAt: Pass2
        States:
          - Type: Pass
            Name: Pass2
            End: true
      - StartAt: Pass3
        States:
          - Type: Pass
            Name: Pass3
            End: true
  - Type: Pass
    Name: Pass4
    End: true

相关文档