タイムアウトと再試行を構成する

ディスプレイ&ビデオ 360 API の多くのメソッドは、完了までに数秒以上かかる複雑なオペレーションを実行します。これらのメソッドへのリクエストで、想定されるレイテンシを超えて API 側またはクライアント側でエラーが発生することがあります。このページでは、リクエスト レイテンシの増加による問題に対処するための方法について説明します。

クライアント ライブラリのデフォルトのタイムアウトを長くする

リファレンス ドキュメントでは、予想されるレイテンシを定期的に超過する特定のメソッドがいくつかラベル付けされています。他の方法でも、定期的にレイテンシの高い動作が発生することがあります。

一部のクライアント ライブラリのデフォルトのタイムアウトの上限では、レイテンシの高いリクエストを行うとエラーが発生する可能性があります。サポートされているクライアント ライブラリのサブセットのデフォルトのタイムアウトは次のとおりです。

  • Java: 20 秒
  • Python: 60 秒
  • PHP: 60 秒

これらのデフォルトのタイムアウトを長くすることで、クライアントサイドのタイムアウトを回避できます。次の手順に沿って、実行時にクライアント ライブラリのデフォルトのタイムアウトを調整します。

Java

  1. 必要なリソースをインポートします。

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. HTTP タイムアウトを設定する関数をビルドします。

    /**
     * Adjusts HTTP timeout values used by the provided request initializer.
     *
     * @param requestInitializer The {@link HttpRequestInitializer} used to authorize requests.
     * @param newHttpTimeout The HTTP timeout for requests in seconds.
     * @return An {@link HttpRequestInitializer} with modified HTTP timeout values.
     */
    private static HttpRequestInitializer setHttpTimeout(
        final HttpRequestInitializer requestInitializer,
        final int newHttpTimeout) {
      return new HttpRequestInitializer() {
        @Override
        public void initialize(HttpRequest httpRequest) throws IOException {
          requestInitializer.initialize(httpRequest);
          httpRequest.setConnectTimeout(newHttpTimeout * 1_000);
          httpRequest.setReadTimeout(newHttpTimeout * 1_000);
        }
      };
    }
    
  3. Display & Video 360 API クライアントを作成するときに関数を呼び出す。

    // Create authorized API client with non-default timeouts.
    DisplayVideo service =
        new DisplayVideo.Builder(
            credential.getTransport(),
            credential.getJsonFactory(),
            setHttpTimeout(credential, http-timeout-in-seconds)
        )
            .setApplicationName("displayvideo-java-installed-app-sample")
            .build();
    

Python

  1. Google API Python クライアント ライブラリの http モジュールをインポートします。

    from googleapiclient import http
    
  2. デフォルトのタイムアウト定数を更新。

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. API サービスを構築します。

    # Build the API service.
    service = discovery.build(
      'displayvideo',
      'v3',
      discoveryServiceUrl=discovery_url,
      credentials=credentials)
    

PHP

  1. Composer を使用して Guzzle HTTP ライブラリをダウンロードしてインストールします。

    composer require guzzlehttp/guzzle:^7.0
  2. Guzzle HTTP クライアントを作成し、タイムアウト値を割り当てます。

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. Google クライアントを作成し、Guzzle HTTP クライアントを割り当てます。

    $client = new Google_Client();
    $client->setHttpClient($httpClient);
    

API タイムアウト エラーを処理する

まれに、複雑なオペレーションを完了するリクエストがサーバーサイドのタイムアウト(180 秒)を超え、API から 408 または 504 エラー レスポンスが返されることがあります。

リクエストがこれらのエラーコードのいずれかで応答した場合は、指数バックオフ戦略を使用してリクエストを再試行することをおすすめします。

エラーが解消されない場合は、お問い合わせフォームからサポートにお問い合わせください。