Tiempo de espera

Todos los servicios de la API de Google Ads tienen una configuración predeterminada, incluidos los tiempos de espera que se utilizan el transporte. Todos los servicios de una versión determinada de la API de Google Ads tienen un un archivo JSON dedicado con esta configuración predeterminada definida en el servicio y el método niveles. Por ejemplo, puedes encontrar los archivos relacionados con la versión más reciente de la API de Google Ads versión aquí.

La configuración predeterminada es adecuada para la mayoría de los casos de uso, pero puede haber ocasiones cuando necesitas anularlos. La biblioteca cliente para PHP admite la anulación de tiempo de espera para las llamadas unarias y de transmisión del servidor.

Puedes establecer el tiempo de espera en 2 horas o más, pero es posible que se agote el tiempo de espera de la API solicitudes de larga duración y muestran Error DEADLINE_EXCEEDED.

Anula tiempos de espera para una llamada de transmisión del servidor

El único método de servicio de la API de Google Ads que utiliza este tipo de llamada es el GoogleAdsService.SearchStream Para anular el tiempo de espera predeterminado, debes agregar un parámetro adicional cuando llames el método:

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

Anula tiempos de espera de una llamada unaria

La mayoría de los métodos de servicio de la API de Google Ads utilizan llamadas unarias. los ejemplos más comunes son GoogleAdsService.Search y GoogleAdsService.Mutate Para anular el tiempo de espera predeterminado, debes agregar un parámetro adicional cuando llames el método:

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