Function Compute支援為每次提交的任務設定全域唯一的ID。當出現不可知的結果時,例如非同步呼叫提交任務介面逾時,您可以通過提交相同ID的任務進行重試,任務去重功能可以避免任務的重複執行。本文介紹如何通過設定TaskID來實現任務去重。
功能原理
Function Compute提供TaskID這一任務概念,該ID全域唯一。建議您在每次提交任務時指定該ID,並在出現逾時等情況下進行重試。Function Compute會對您重複提交的任務進行校正,當有相同ID進入系統時,該次請求將認為是重複提交而被拒絕,並返回錯誤409。
說明
Function Compute還提供了RequestID這一概念,如果您設定了RequestID但未設定TaskID,系統將自動化佈建TaskID為RequestID。使用非同步任務時,建議您設定TaskID,無需設定RequestID。
設定TaskID
您可以在Function Compute控制台、使用Serverless Devs或調用API提交一次任務執行。如果需要設定TaskID,請在觸發函數執行時添加HTTP要求標頭X-Fc-Stateful-Async-Invocation-Id。
以Go SDK為例,觸發任務執行時設定TaskID的程式碼範例如下:
import fc "github.com/aliyun/fc-go-sdk"
func SubmitJob() {
invokeInput := fc.NewInvokeFunctionInput("ServiceName", "FunctionName")
invokeInput = invokeInput.WithAsyncInvocation().WithStatefulAsyncInvocationID("TaskUUID")
invokeOutput, err := fcClient.InvokeFunction(invokeInput)
...
}