Alle Google Ads API-Dienste haben Standardeinstellungen, einschließlich Zeitüberschreitungen, die vom Transport verwendet werden. Für jeden Dienst einer bestimmten Google Ads API-Version gibt es eine eigene JSON-Datei, in der diese Standardeinstellungen auf Dienst- und Methodebene definiert sind. Die Konfigurationsdateien für Dienstressourcen für die aktuelle Google Ads API-Version finden Sie beispielsweise auf GitHub.
Die Standardeinstellungen sind für die meisten Anwendungsfälle ausreichend, aber es kann vorkommen, dass Sie sie überschreiben müssen. Die Clientbibliothek für PHP unterstützt das Überschreiben von Zeitlimit-Einstellungen pro Aufruf (in Millisekunden mit der Option timeoutMillis angegeben) sowohl für Server-Streaming als auch für unäre Aufrufe.
Sie können zwar hohe Zeitlimitwerte (z. B. 2 Stunden oder mehr) in der Clientbibliothek konfigurieren, aber zugrunde liegende Netzwerkproxys oder der API-Server können lang andauernde Anfragen trotzdem früher beenden und einen DEADLINE_EXCEEDED-Statusfehler zurückgeben.
Timeouts für einen Server-Streaming-Aufruf überschreiben
Die einzige Google Ads API-Dienstmethode, die einen Server-Streaming-Aufruf verwendet, ist GoogleAdsService.SearchStream. Wenn Sie das Standardzeitlimit überschreiben möchten, übergeben Sie timeoutMillis (in Millisekunden) im optionalen Array mit Anrufoptionen, wenn Sie die Methode aufrufen:
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/V25/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; } }
Zeitüberschreitungen für einen unären Aufruf überschreiben
Die meisten Dienstmethoden der Google Ads API verwenden Unary-Aufrufe. Typische Beispiele sind GoogleAdsService.Search und GoogleAdsService.Mutate. Wenn Sie das Standardzeitlimit überschreiben möchten, übergeben Sie timeoutMillis (in Millisekunden) im optionalen Array mit Aufrufoptionen, wenn Sie die Methode aufrufen:
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/V25/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; } }