Serverless 工作流支持與多個云服務集成,即將其他服務作為任務步驟的執行單元。服務集成方式由FDL語言表達,在任務步驟中,您可以使用resourceArn
來定義集成的目標服務,使用pattern
定義集成模式。本文主要介紹了服務集成的相關內容,包括集成模式、上下文對象和已集成云服務。
關于可使用的云服務列表,請參見已集成云服務。
集成模式
目前Serverless 工作流支持三種不同的集成模式。
請求響應模式:調用第三方服務,在Serverless 工作流獲得HTTP響應后進入下一個步驟。默認模式是請求響應模式。
在FDL步驟中使用
resourceArn
描述目標服務,使用pattern: requestResponse
(可選,若無該參數則為默認模式)描述服務集成模式。該模式下Serverless 工作流將在調用接口返回后立刻進入到下一步驟的執行。以子流程功能(Serverless 工作流作為被集成服務)為例。version: v1 type: flow steps: - type: task name: testSubflow resourceArn: acs:fnf:::flow/flowABC #描述子流程。 pattern: requestResponse #描述服務集成模式:默認(請求響應)模式。 - type: pass name: dummy
該示例展示了當
testSubflow
步驟執行時會觸發一個flowABC
流程。觸發成功后,將進入下一步驟dummy
,flowABC
流程可能仍然正在執行。同步模式:通常這類服務提供了異步執行接口,Serverless 工作流調用異步接口成功后會等待,直到相關任務完成并獲得了執行結果,Serverless 工作流才會繼續執行下一個步驟。
對于某些集成服務,Serverless 工作流可以等到該服務的任務運行完成后再進入下一個步驟。一般這類服務為執行某個任務提供了任務啟動(異步)的接口,需要提交任務并等待任務執行完成再進行下一步驟。
在FDL步驟中使用
resourceArn
描述目標服務,使用pattern: sync
描述服務集成模式。以子流程功能(Serverless 工作流作為被集成服務)為例。version: v1 type: flow steps: - type: task name: testTask resourceArn: acs:fnf:::flow/flowABC #描述子流程。 pattern: sync #描述服務集成模式:同步。 - type: pass name: dummy
該示例展示了當該步驟執行時會觸發一個Serverless 工作流流程。觸發成功后將等待該流程的執行結果,執行完成后將進入下一步驟。當
testTask
步驟執行時會觸發一個flowABC
流程。觸發成功后,將等待該流程的執行結果,執行完成后才進入下一步驟dummy
,flowABC
流程已經執行完成。等待回調模式:調用第三方服務并傳入任務令牌,Serverless 工作流將進入等待,直到您手動使用該令牌通知流程執行結果后才會繼續執行下一個步驟。
回調任務將使當前流程在任務調度點暫停,直到收到任務令牌的回調指令。在FDL步驟中使用
resourceArn
描述目標服務,使用pattern: waitForCallback
描述服務集成模式。以子流程功能(Serverless 工作流作為被集成服務)為例。version: v1 type: flow steps: - type: task name: testSubflow resourceArn: acs:fnf:::flow/flowABC #描述子流程。 pattern: waitForCallback #描述服務集成模式:等待回調。 - type: pass name: dummy
該示例展示了當
testSubflow
步驟執行時會觸發一個flowABC
流程。觸發成功后,將暫停流程執行,等待回調(通過ReportTaskSucceed
或ReportTaskFailed
API)。在收到回調請求并處理完成后,流程將進入下一步驟dummy
。flowABC
流程可能已經執行完成,也可能還在執行。其中回調是由您發起。
上下文對象
上下文對象是流程執行實例的內部JSON對象,其中包含了關于執行、步驟的相關信息。該對象提供外部訪問方式,在inputMappings中您可將context對象映射到具體變量中來實現訪問。目前開放的context對象結構如下所示。
"context": {
"flow": {
// 本流程的唯一標識符id和流程名稱、字符串類型。
"id": "val1",
"name "val2",
},
"execution": {
// 本執行的名稱。
"name": "val3"
},
"step": {
// 本步驟的名稱。
"name": "val4"
// 本步驟的事件ID。
"eventId": "val5"
// 當前循環的次數,在循環步驟(foreach)下可以使用。
"IterationIndex": "val6",
},
"task": {
// 本步驟的標識符,為一個字符串,在回調模式(waitForCallback)下可以使用。
"token": "val7",
},
}
使用方式:例如集成Serverless 工作流自身服務,需要在子流程中獲取調用其父流程的相關信息,并獲取調用步驟的taskToken用于回調,您可以通過以下方式獲取這兩個字段。
...
inputMappings:
- target: current_flow_name
source: $context.flow.name
- target: current_execution_name
source: $context.execution.name
- target: current_step_task_token
source: $context.task.token
已集成云服務
方案 | 請求響應(requestResponse) | 同步(sync) | 等待回調(waitForCallback) |
函數計算(FC) | 支持 | 不支持 | 不支持 |
輕量消息隊列(原 MNS)隊列觸發器 | 支持 | 不支持 | 支持 |
輕量消息隊列(原 MNS)主題觸發器 | 支持 | 不支持 | 支持 |
Serverless 工作流(SWF) | 支持 | 支持 | 支持 |