本文介绍了流程定义语言的基本知识和相关使用示例。
基本知识
流程定义语言FDL(Flow Definition Language)用来描述和定义业务逻辑,在执行流程时,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(可选):输入映射。输入映射中引用的
$input
是StartExecution
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
- 以下示例流程包含两个子步骤(
step1
和step4
),其中第一个步骤(step1
)又包含了两个子步骤(step2
和step3
)。version: v1 type: flow steps: - type: parallel name: step1 branches: - steps: - type: pass name: step2 - steps: - type: pass name: step3 - type: pass name: step4
更多信息
流程定义语言的特性,请参见以下文档: