流程定义介绍

本文介绍云工作流的流程定义语言,通过基础知识和相关使用示例,让您轻松熟悉构建和管理业务流程的技巧。

基础知识

云工作流的流程定义语言FDL(Flow Definition Language)是一种基于YAML语言的状态机定义规范,通过定义一个状态机(状态集合)描述业务流程逻辑;在执行时,按照流程定义的状态关系结合业务运行时执行结果驱动状态流转,最终完成流程执行。

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

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

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

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

  • 任务(Task):用于调用其他集成服务API来完成特定任务。

  • 传递(Pass):用于作为空白节点和数据预处理节点,在流程定义和调试阶段发挥作用。

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

  • 选择(Choice):用于根据特定的条件或逻辑判断来决定流程的下一步走向。

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

  • 迭代(Map):允许用户对一个数组中的每个元素执行相同的操作,从而简化大规模数据的处理和工作流的管理。

  • 成功(Succeed):用于提前结束一系列状态的执行,在需要根据特定条件提前结束流程或子流程时非常有用。

  • 失败(Fail):用于处理工作流执行过程中出现的预期或非预期错误。

流程属性

流程包含以下属性。

字段

类型

是否必选

描述

示例值

Type

String

流程定义类型。

StateMachine

SpecVersion

String

流程定义的版本。

v1

States

Array

内部嵌套的状态数组,里面包含了流程的所有步骤,这些步骤可以嵌套使用,以控制工作流的执行路径。

Processor:
   StartAt: Pass1
   States:
     - Type: Pass
       Name: Pass1
       End: true

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: Pass2  
        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被标记为完成。

流程示例

以下示例流程包含三个状态,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

相关文档