Function Computeでは、送信されたタスクに対してグローバルに一意のIDを設定できます。 予期しないイベントが発生したときに, タスクIDを使用してタスクを再試行できます。 たとえば、タスク送信操作が非同期で呼び出されると、タイムアウトエラーが発生します。 タスク重複排除機能は、タスクの繰り返し実行を回避するのに役立ちます。 このトピックでは、タスクIDを設定してタスク重複排除を実装する方法について説明します。
制御ポリシー機能の動作
Function Computeは、タスクID機能を提供します。 タスクIDはグローバルに一意です。 タスクを送信するたびにタスクIDを指定することを推奨します。 タイムアウトエラーなどのエラーが発生した場合、タスクIDを使用してタスクを再試行できます。 Function Computeは、繰り返し送信したタスクを検証します。 同じIDがシステムに入力されると、リクエストは重複送信と見なされ、拒否され、エラー409
が返されます。
Function ComputeはリクエストIDも提供します。 リクエストIDを設定し、タスクIDを設定しない場合、システムは自動的にタスクIDをリクエストIDに設定します。 非同期タスクを使用する場合は、タスクIDを指定し、リクエストIDを指定しないことを推奨します。
タスクIDの設定
Function Computeコンソールを使用するか、Serverless Devsを使用するか、API操作を呼び出してタスクを実行することができます。 タスクIDを設定するには、関数がトリガーされたときにHTTPリクエストヘッダーX-Fc-Stateful-Async-Invocation-Id
を追加します。
Go用のSDKを例として使用します。 次のコードは、タスクがトリガーされたときにタスクIDを設定する方法を示しています。
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)
...
}