Zaman aşımı

Tüm Google Ads API hizmetlerinde, aktarım tarafından kullanılan zaman aşımları da dahil olmak üzere varsayılan ayarlar bulunur. Belirli bir Google Ads API sürümünün herhangi bir hizmeti, hizmet ve yöntem düzeylerinde tanımlanan bu varsayılan ayarları içeren özel bir JSON dosyasına sahiptir. Örneğin, en yeni Google Ads API sürümüne ait hizmet kaynağı yapılandırma dosyalarını GitHub'da bulabilirsiniz.

Varsayılan ayarlar çoğu kullanım alanı için yeterlidir ancak bunları geçersiz kılmanız gereken zamanlar olabilir. PHP için istemci kitaplığı, hem sunucu akışı hem de tekli aramalar için arama başına zaman aşımı ayarlarının (timeoutMillis seçeneği kullanılarak milisaniye cinsinden belirtilir) geçersiz kılınmasını destekler.

İstemci kitaplığında yüksek zaman aşımı değerleri (ör. 2 saat veya daha fazla) yapılandırabilirsiniz ancak temel alınan ağ proxy'leri ya da API sunucusu, uzun süren istekleri daha erken sonlandırıp DEADLINE_EXCEEDED durum hatası döndürebilir.

Sunucu akışı çağrılarında zaman aşımlarını geçersiz kılma

Sunucu akışı çağrısı kullanan tek Google Ads API hizmet yöntemi GoogleAdsService.SearchStream'dir. Varsayılan zaman aşımını geçersiz kılmak için yöntemi çağırırken isteğe bağlı çağrı seçenekleri dizisinde timeoutMillis (milisaniye cinsinden) değerini iletin:

    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;
        }
    }
      

Tekli bir arama için zaman aşımlarını geçersiz kılma

Çoğu Google Ads API hizmeti yöntemi tekli çağrıları kullanır. Tipik örnekler GoogleAdsService.Search ve GoogleAdsService.Mutate'dır. Varsayılan zaman aşımını geçersiz kılmak için yöntemi çağırırken isteğe bağlı çağrı seçenekleri dizisinde timeoutMillis (milisaniye cinsinden) değerini iletin:

    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;
        }
    }