Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Node.jsのCloud Tasksクライアントでタスク作成をリトライする

More than 1 year has passed since last update.

Node.jsのCloud Tasksクライアントを使っていると、たまにgRPCのエラーでタスクの作成に失敗することがありました。リトライのための設定がややわかりにくかったので、リトライする方法をまとめておきます。

バージョン

  • @google-cloud/tasks: 1.5.1
  • google-gax: 1.7.5

設定方法

ドキュメントにあるように、 CloudTasksClient.createTask() の第2引数に CallOptions を渡すとリトライなどの設定を行えます。具体的な設定例は次の通りです。

const client = new CloudTasksClient();

const request = {
  parent: client.queuePath(project, location, queue),
  task: {
    appEngineHttpRequest: {
      httpMethod: "POST",
      relativeUri: "/log_payload"
    }
  }
};

const options = {
  retry: {
    retryCodes: [
      13 // INTERNAL
    ], // リトライ対象のエラーコードを1つ以上指定する
    backoffSettings: {
      initialRetryDelayMillis: 100, // 最初のリトライ間隔(ミリ秒)
      retryDelayMultiplier: 1.3, // リトライ間隔の増加率
      maxRetryDelayMillis: 60000, // リトライ間隔の最大値
      initialRpcTimeoutMillis: 20000, // 最初のタイムアウト(ミリ秒)
      rpcTimeoutMultiplier: 1, // タイムアウトの増加率
      maxRpcTimeoutMillis: 20000, // タイムアウトの最大値
      totalTimeoutMillis: 600000 // 全体のタイムアウト(ミリ秒)
    }
  }
};

const [response] = await client.createTask(request, options);

retry.retryCodes に1つ以上のエラーコードを指定しないとリトライされません。エラーコードは実際にタスク作成に失敗したときの例外に code として含まれています。一覧はgoogle-gaxのソースコードで確認できます。

retry.backoffSettings に書いているのは、createTask()の第2引数を指定しなかった場合に使われるデフォルト値です。ドキュメントに記載がなかったので、デバッグ実行して確認しました。このデフォルト値は設定ファイルから生成されているようです。

終わりに

ちゃんとコードを読んだわけではないですが、タスクの作成は冪等な処理ではないので、安全側に倒して自動リトライしないのだと思われます。リトライする場合には、同じタスクが2個作られてしまっても問題ないような実装にするよう気をつけましょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away