全部產品
Search
文件中心

CloudFlow:服務整合模式

更新時間:Nov 19, 2024

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的非同步任務時,調用CloudFlowStopExecution - 停止一個正在執行的流程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)可以是任何中間儲存服務。