函數計算接收異步調用請求后,將請求持久化后會立即返回響應,無需等待請求執行完成。如需要保留執行失敗且超過最大重試次數被丟棄的請求,或通知下游異步調用結果,可以通過配置結果回調功能實現。配置異步目標服務后,異步調用請求執行完成,函數計算根據執行結果自動回調對應的服務。
功能原理
結果回調流程如下圖所示。
適用場景
-
保存丟棄的事件供后續使用
當異步請求執行失敗,并且按照指定的策略重試后仍然失敗,函數計算將丟棄該請求。如果配置了失敗目標,函數計算將自動把失敗請求的上下文信息推送到另一個函數,執行自定義的錯誤處理邏輯。
-
自動通知下游服務執行結果
請求執行成功后,如果配置了成功目標,函數計算系統會自動將成功請求的上下文信息推送到下游目標服務。
支持的異步調用目標服務
當為函數配置了異步調用目標,并且異步調用后的結果符合條件時,函數計算會將請求上下文和數據推送至對應服務。可以針對不同函數、別名和版本配置不同的目標服務。目前支持的異步調用目標服務只有函數計算。
異步調用目標服務的配置說明如下:
異步調用目標的事件內容
函數計算作為函數異步調用目標時,事件內容示例如下。
{
"timestamp": 1660120276975,
"requestContext": {
"requestId": "xxx",
"host": "xxx.fc-huadong1.daliqc.cn",
"uri": "/abc/def",
"approximateInvokeCount": 3
},
"requestPayload": "",
"responseContext": {
"statusCode": 200,
},
"responsePayload": ""
}
| 參數 | 說明 |
|---|---|
| timestamp | 調用時間戳。 |
| requestContext | 請求上下文。 |
| requestContext.requestId | 異步調用的請求ID。 |
| requestContext.host | 異步執行的函數域名。 |
| requestContext.uri | 異步執行的函數uri。 |
| requestContext.approximateInvokeCount | 異步調用的執行次數。當該值大于1時,說明函數計算對您的函數進行了重試。 |
| requestPayload | 請求函數的原始負載。 |
| responseContext | 返回上下文。 |
| responseContext.statusCode | 調用函數的返回碼。 |
| responsePayload | 執行函數返回的原始負載。 |
避免循環調用
當您在配置異步執行目標時,請務必保證不要出現循環調用的情況。例如,您為函數A配置了成功調用時的異步目標為函數B,為函數B配置了成功調用時的異步目標為函數A。當您異步觸發函數A并且執行成功后,則可能出現A到B,再到A的循環調用的情況。
配置異步調用目標服務
說明配置異步調用目標前,請先創建函數。
-
登錄函數計算控制臺,在左側導航欄,單擊函數。
-
在函數頁面,單擊目標函數。
-
在函數配置頁面,選擇配置頁簽。
-
在左側導航欄,選擇異步配置頁簽,按需配置參數信息。
-
配置成功目標
-
在成功目標區域,單擊編輯。
在成功目標面板,成功時調用其他服務選擇啟用,然后配置當函數成功執行后將需要發送結果的目標云服務。參數信息如下:
參數 說明 目標服務 函數計算。當目標服務選擇的是函數計算時,需配置以下參數信息:
函數名稱:指定目標函數的名稱。
版本或別名:指定函數的別名或版本。 -
單擊部署。
-
-
配置失敗目標
-
在失敗目標區域,單擊編輯。
-
在失敗目標面板,失敗時調用其他服務選擇啟用,然后配置當函數執行失敗后需要發送消息的目標云服務。
配置失敗目標的參數,請參見配置成功目標。
-
單擊部署。
-
-
常見問題
如何觸發函數的異步調用?
可以通過以下方式對函數計算的函數發起一次異步調用。
- 登錄函數計算控制臺,找到目標函數,然后在測試頁,勾選我想通過異步的方式進行調用。
- 創建HTTP觸發器,觸發HTTP調用,設置參數x-fc-invocation-type的值為Async。
- 調用OpenAPI接口,設置參數xFcInvocationType的值為Async。
- 創建支持異步調用的觸發器異步觸發函數。
后續操作
如果希望獲得函數異步請求各個階段的狀態,可通過開啟任務模式來實現,具體信息參見異步任務。