すべてのプロダクト
Search
ドキュメントセンター

Function Compute:タスク重複排除

最終更新日:Sep 09, 2024

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)
    ...
}