函数计算支持为每次提交的任务设定全局唯一的ID。当出现不可知的结果时,例如异步调用提交任务接口超时,您可以通过提交相同ID的任务进行重试,任务去重功能可以避免任务的重复执行。本文介绍如何通过设置TaskID来实现任务去重。

功能原理

函数计算提供TaskID这一任务概念,该ID全局唯一。建议您在每次提交任务时指定该ID,并在出现超时等情况下进行重试。函数计算会对您重复提交的任务进行校验,当有相同ID进入系统时,该次请求将认为是重复提交而被拒绝,并返回错误400

说明 函数计算还提供了RequestID这一概念,如果您设置了RequestID但未设置TaskID,系统将自动设置TaskIDRequestID。使用异步任务时,建议您设置TaskID,无需设置RequestID

设置TaskID

您可以在函数计算控制台、使用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)
    ...
}