本文介紹了流程定義語言的基本知識和相關使用樣本。
基本知識
流程定義語言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)步驟去調用Function Compute服務的函數。 - 如果需要等待一段時間可以通過等待(
wait)步驟暫停流程的執行。 - 通過選擇(
choice)步驟來定義不同執行路徑。 - 通過成功(
succeed)步驟或者失敗(fail)步驟來提前終止流程步驟。 - 通過並行(
parallel)步驟來並存執行多個分支。 - 通過並行迴圈(
foreach)步驟來平行處理數組資料。
流程包含以下屬性:
- version(必需):流程版本,僅支援v1。
- type(必需):flow表示是流程類型。
- steps(必需):定義了流程的多個串列步驟。一個步驟執行完成後,如果成功,則會執行下一個步驟。如果需要提前結束,可以使用步驟的結束(
end)屬性,或者使用成功和失敗步驟。 - inputMappings(可選):輸入映射。輸入映射中引用的
$input是StartExecutionAPI請求的Input參數。 - outputMappings(可選):輸出映射。輸入映射中的引用的
$local是一個JSON對象,記錄了串列的每個步驟的執行結果。說明 如果未指定輸出映射,將$local作為最終流程輸出。 - timeoutSeconds(可選):流程逾時時間。如果流程執行超過指定的逾時時間,則流程執行逾時。
樣本
- 以下的樣本流程包含一個任務步驟,這個步驟調用一個Function Compute的函數。
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
更多資訊
流程定義語言的特性,請參見以下文檔: