タイムアウト

すべての Google Ads API サービスには、トランスポートで使用されるタイムアウトなどのデフォルト設定があります。特定の Google Ads API バージョンのサービスには、サービスレベルとメソッドレベルで定義されたこれらのデフォルト設定を含む専用の JSON ファイルがあります。たとえば、最新の Google Ads API バージョンに関連するファイルはこちらで確認できます。

ほとんどのユースケースではデフォルトの設定で十分ですが、オーバーライドが必要になる場合もあります。PHP 用クライアント ライブラリは、サーバー ストリーミングと単項呼び出しの両方でタイムアウト設定のオーバーライドをサポートしています。

タイムアウトは 2 時間以上に設定できますが、API は非常に長いリクエストをタイムアウトして DEADLINE_EXCEEDED エラーを返すことがあります。

サーバー ストリーミング呼び出しのタイムアウトをオーバーライドする

このタイプの呼び出しを使用する Google Ads API サービス メソッドは、GoogleAdsService.SearchStream のみです。デフォルトのタイムアウトをオーバーライドするには、メソッドを呼び出すときに追加のパラメータを追加する必要があります。

private static function makeServerStreamingCall(     GoogleAdsClient $googleAdsClient,     int $customerId ) {     $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();     // Creates a query that retrieves all campaign IDs.     $query = 'SELECT campaign.id FROM campaign';      $output = '';     try {         // Issues a search stream request by setting a custom client timeout.         /** @var GoogleAdsServerStreamDecorator $stream */         $stream = $googleAdsServiceClient->searchStream(             SearchGoogleAdsStreamRequest::build($customerId, $query),             [                 // Any server streaming call has a default timeout setting. For this                 // particular call, the default setting can be found in the following file:                 // https://github.com/googleads/google-ads-php/blob/master/src/Google/Ads/GoogleAds/V22/Services/resources/google_ads_service_client_config.json.                 //                 // When making a server streaming call, an optional argument is provided and can                 // be used to override the default timeout setting with a given value.                 'timeoutMillis' => self::CLIENT_TIMEOUT_MILLIS             ]         );         // Iterates over all rows in all messages and collects the campaign IDs.         foreach ($stream->iterateAllElements() as $googleAdsRow) {             /** @var GoogleAdsRow $googleAdsRow */             $output .= ' ' . $googleAdsRow->getCampaign()->getId();         }         print 'The server streaming call completed before the timeout.' . PHP_EOL;     } catch (ApiException $exception) {         if ($exception->getStatus() === ApiStatus::DEADLINE_EXCEEDED) {             print 'The server streaming call did not complete before the timeout.' . PHP_EOL;         } else {             // Bubbles up if the exception is not about timeout.             throw $exception;         }     } finally {         print 'All campaign IDs retrieved:' . ($output ?: ' None') . PHP_EOL;     } }       

単一呼び出しのタイムアウトをオーバーライドする

Google Ads API サービス メソッドのほとんどは単項呼び出しを使用します。一般的な例は GoogleAdsService.SearchGoogleAdsService.Mutate です。デフォルトのタイムアウトをオーバーライドするには、メソッドを呼び出すときに追加のパラメータを追加する必要があります。

private static function makeUnaryCall(GoogleAdsClient $googleAdsClient, int $customerId) {     $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();     // Creates a query that retrieves all campaign IDs.     $query = 'SELECT campaign.id FROM campaign';      $output = '';     try {         // Issues a search request by setting a custom client timeout.         $response = $googleAdsServiceClient->search(             SearchGoogleAdsRequest::build($customerId, $query),             [                 // Any unary call is retryable and has default retry settings.                 // Complete information about these settings can be found here:                 // https://googleapis.github.io/gax-php/master/Google/ApiCore/RetrySettings.html.                 // For this particular call, the default retry settings can be found in the                 // following file:                 // https://github.com/googleads/google-ads-php/blob/master/src/Google/Ads/GoogleAds/V22/Services/resources/google_ads_service_client_config.json.                 //                 // When making an unary call, an optional argument is provided and can be                 // used to override the default retry settings with given values.                 'retrySettings' => [                     // Sets the maximum accumulative timeout of the call, it includes all tries.                     'totalTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS,                     // Sets the timeout that is used for the first try to one tenth of the                     // maximum accumulative timeout of the call.                     // Note: This overrides the default value and can lead to                     // RequestError.RPC_DEADLINE_TOO_SHORT errors when too small. We recommend                     // to do it only if necessary.                     'initialRpcTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS / 10,                     // Sets the maximum timeout that can be used for any given try to one fifth                     // of the maximum accumulative timeout of the call (two times greater than                     // the timeout that is used for the first try).                     'maxRpcTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS / 5                 ]             ]         );         // Iterates over all rows in all messages and collects the campaign IDs.         foreach ($response->iterateAllElements() as $googleAdsRow) {             /** @var GoogleAdsRow $googleAdsRow */             $output .= ' ' . $googleAdsRow->getCampaign()->getId();         }         print 'The unary call completed before the timeout.' . PHP_EOL;     } catch (ApiException $exception) {         if ($exception->getStatus() === ApiStatus::DEADLINE_EXCEEDED) {             print 'The unary call did not complete before the timeout.' . PHP_EOL;         } else {             // Bubbles up if the exception is not about timeout.             throw $exception;         }     } finally {         print 'All campaign IDs retrieved:' . ($output ?: ' None') . PHP_EOL;     } }