本文介绍了流程定义语言的基本知识和相关使用示例。

基本知识

流程定义语言(Flow Definition Language,简称 FDL)用来描述和定义业务逻辑,在执行流程时,Serverless 工作流服务会根据流程定义依次执行相关步骤。在 FDL 中,一个流程(Flow)通常包含若干步骤(Step),这些步骤可以是简单的原子步骤,如任务(task)、成功(succeed)、失败(fail)、等待(wait)和传递(pass)等;也可以是复杂的控制步骤,如选择(choice)、并行(parallel)和并行循环(foreach)等。这些步骤可以组合使用以构建复杂的业务逻辑,例如一个并行步骤的分支可能是一个顺序步骤。同时,步骤执行可能出现错误,但是 FDL 提供了错误重试(retry)和捕获(catch)能力。

FDL 的步骤类似于编程语言中的函数(Function),组合类似于函数调用。步骤之间通过输入(Input)和输出(Output)传递数据,每个步骤由本地(Local)变量保存数据。如果一个步骤包含另一个步骤,则称外层步骤为父步骤,被包含步骤为子步骤。

在定义流程时,您可以:
  • 通过传递(pass) 步骤来做占位符规划流程基本结构。
  • 通过任务(task)步骤去调用函数计算服务的函数。
  • 如果需要等待一段时间可以通过等待(wait)步骤暂停流程的执行。
  • 通过选择(choice)步骤来定义不同执行路径。
  • 通过成功(succeed)步骤或者失败(fail)步骤来提前终止流程步骤。
  • 通过并行(parallel)步骤来并行执行多个分支。
  • 通过并行循环(foreach)步骤来并行处理数组数据。

流程包含以下属性:

  • version(必需):流程版本,仅支持 v1
  • type(必需):flow,表示是流程类型。
  • steps(必需):定义了流程的多个串行步骤。一个步骤执行完成后,如果成功,则会执行下一个步骤。如果需要提前结束,可以使用步骤的结束(end)属性,或者使用成功和失败步骤。
  • inputMappings(可选):输入映射。输入映射中引用的 $inputStartExecution API 请求的 Input 参数。
  • outputMappings(可选):输出映射。输入映射中的引用的 $local 是一个 JSON 对象,记录了串行的每个步骤的执行结果。
    说明 如果未指定输出映射,将 $local 作为最终流程输出。
  • timeoutSeconds(可选):流程超时时间。如果流程执行超过指定的超时时间,则流程执行超时。

示例

  • 以下的示例流程包含一个任务步骤,这个步骤调用一个函数计算的函数。
    version: v1
    type: flow
    steps:
      - type: task
        name: hello
        resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello      
  • 以下示例流程包含两个子步骤(step1step4),其中第一个步骤(step1)又包含了两个子步骤(step2step3)。
    version: v1
    type: flow
    steps:
      - type: parallel
        name: step1
        branches:
          - steps:
            - type: pass
              name: step2
          - steps:
            - type: pass
              name: step3
      - type: pass
        name: step4       

更多信息

流程定义语言的特性,请参见以下文档: