CloudFlow通過使用Task類型的狀態來調用各種服務,您可以使用三種服務整合模式來控制這些服務調用狀態流轉。本文介紹請求響應、等待系統回調和等待使用者自訂回調三種整合模式的詳細資料。
注意事項
您可以使用請求響應(RequestComplete)、等待系統回調(WaitForSystemCallback)和等待使用者自訂回調(WaitForCustomCallback)這三種整合模式來整合服務,但不是所有被調用的服務都支援這三種服務整合模式。關於不同服務對三種整合模式的支援情況,請參見整合模式。
請求響應(RequestComplete)
當您在調用任務(Task)狀態的服務時,預設整合模式為請求響應模式。當您向服務發出請求時,系統會等待該服務返迴響應後再繼續執行後續的任務。
以下樣本展示如何通過請求響應(RequestComplete)調用一個Function Compute的函數。執行這個工作流程會調用指定的函數,並等待函數處理的結果。由於是同步調用,狀態機器會在調用結束後接收到函數返回的結果。
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: 調用函數樣本
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Sync
body: xxxx
End: true
等待系統回調(WaitForSystemCallback)
對於一些任務類的整合服務,以及Function Compute非同步呼叫,通過指定等待系統回調(WaitForSystemCallback)任務模式,可以等待任務執行完成後再進入下一個狀態。
以下樣本展示如何通過等待系統回調(WaitForSystemCallback)調用一個Function Compute的函數。
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: 調用函數樣本
Action: FC:InvokeFunction
TaskMode: WaitForSystemCallback
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Async
body: xxxx
End: true
等待系統回調(WaitForSystemCallback)表示工作流程會等待任務完成後才進入下一個狀態。
如果使用等待系統回調(WaitForSystemCallback)服務整合模式的任務中止流程,CloudFlow將無法取消該任務,整合服務可能會收取您預期外的費用,因此,需要您自己取消整合任務。僅在以下三種情況下,CloudFlow可以中止任務。
流程執行已停止。
並行(Parallel)狀態的另一個分支因為被捕獲的錯誤而失敗。
迭代(Map)狀態的迭代失敗,錯誤未被捕獲。
流程引擎將盡最大努力取消任務,例如,當前流程採用等待系統回調(WaitForSystemCallback)任務模式,調用包含了子流程或Function Compute的非同步任務時,調用CloudFlow的StopExecution - 停止一個正在執行的流程API停止當前流程時,CloudFlow會停止包含在流程中的子流程, 然後停止包含在流程中的非同步任務相關函數執行。但是,流程引擎可能無法取消任務,其原因包括但不限於以下幾項。
您的執行角色缺乏進行相應API的調用許可權。
發生了臨時服務中斷。
關於支援等待系統回調(WaitForSystemCallback)任務整合模式的阿里雲產品列表,請參見支援普通整合的雲端服務列表。
等待使用者自訂回調(WaitForCustomCallback)
等待使用者自訂回調(WaitForCustomCallback)模式又稱為攜帶任務令牌的回調,提供一種暫停工作流程,並根據整合服務內部自訂邏輯控制工作流程執行的方式。例如,在流程執行中需要等待使用者審批情境,通過整合調用發起外部系統的審批次程序,直至審批次程序完成,回調工作流程並返回審批結果,工作流程再繼續執行後續的流程步驟。一旦發起WaitForCustomCallback類型的整合調用,當前任務的執行將自動暫停,直到整合服務通過調用ReportTaskSucceeded - 彙報指定的任務執行成功或ReportTaskFailed - 彙報指定的任務執行失敗介面使得流程繼續執行。
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: 調用函數樣本
Action: FC:InvokeFunction
TaskMode: WaitForCustomCallback
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Sync
body: xxxx
End: true
使用者自訂回調的工作原理如下圖所示。相比較輪詢,使用回調有效地降低了延遲、減少了輪詢對伺服器造成的不必要壓力。此外,回調功能配合隊列可以實現對非Function Compute任務的編排,擴充CloudFlow的編排範圍到任意類型的計算資源。
WaitForCustomCallback模式整合流程樣本
CloudFlow與外部微服務整合
本小節以CloudFlow整合外部微服務執行信用檢查為例進行介紹。CloudFlow發布一條訊息至Simple Message Queue (formerly MNS),訊息中包含任務令牌Token。外部微服務與Simple Message Queue (formerly MNS)整合,從隊列中擷取訊息,然後返回結果和原始任務令牌。接下來CloudFlow繼續執行下面的流程,具體流程資訊見下圖。
樣本如下。
Type: StateMachine
Name: myWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: 調用函數樣本
Action: FC:InvokeFunction
TaskMode: WaitForCustomCallback
Parameters:
resourceArn: acs:fc:{regionId}:{accountId}:functions/dataji/LATEST
invocationType: Async
body:
payload.$: $Input
taskToken.$: $Context.Current.TaskToken
End: true
使用WaitForCustomCallback任務模式時,可以使用運算式$Context.Current.TaskToken
在狀態定義的Parameters
欄位中訪問任務令牌。初始$Context
指定訪問內容物件的路徑,並在正在啟動並執行執行中擷取當前任務的任務令牌。
完成後,外部服務會調用ReportTaskSucceeded - 彙報指定的任務執行成功用ReportTaskFailed - 彙報指定的任務執行失敗發送Token及任務執行狀態,工作流程才會繼續進入下一個狀態。
CloudFlow與自建服務整合
下圖展示了使用Simple Message Queue (formerly MNS)服務結合回調API,實現工作流程與自建服務整合,拓寬CloudFlow的適用情境, Simple Message Queue (formerly MNS)可以是任何中間儲存服務。