Configura tiempos de espera y reintentos

Muchos métodos de la API de Display & Video 360 realizan operaciones complejas que pueden tardar más de unos segundos en completarse. A veces, las solicitudes a estos métodos pueden exceder la latencia esperada y causar errores en la API o en el cliente. En esta página, se enumeran las prácticas para manejar problemas causados por la latencia de solicitudes extendidas.

Cómo aumentar el tiempo de espera predeterminado en la biblioteca cliente

Algunos métodos específicos se etiquetaron en su documentación de referencia como que suelen superar la latencia esperada. Otros métodos también podrían mostrar un comportamiento de latencia alta periódicamente.

Los límites de tiempo de espera predeterminados para algunas bibliotecas cliente pueden generar errores cuando se realizan solicitudes de latencia alta. Los tiempos de espera predeterminados para un subconjunto de bibliotecas cliente compatibles son los siguientes:

  • Java: 20 segundos
  • Python: 60 segundos
  • PHP: 60 segundos

Los tiempos de espera del cliente se pueden evitar si aumentas estos tiempos de espera predeterminados. Sigue estas instrucciones para ajustar el tiempo de espera predeterminado de la biblioteca cliente durante el tiempo de ejecución:

Java

  1. Importa los recursos necesarios.

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. Función de compilación para configurar el tiempo de espera de 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. Llama a función cuando se crea el cliente de la API de Display & Video 360.

    // 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. Importa el módulo http de la biblioteca cliente de Python de la API de Google.

    from googleapiclient import http
    
  2. Actualiza la constante de tiempo de espera predeterminada.

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. Compila servicio de API.

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

PHP

  1. Descarga e instala la biblioteca HTTP de Guzzle con Composer.

    composer require guzzlehttp/guzzle:^7.0
    
  2. Crea un cliente HTTP de Guzzle y asigna un valor de tiempo de espera.

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. Crear el cliente de Google y asignar el cliente HTTP de Guzzle

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

Maneja errores de tiempo de espera de la API

En casos excepcionales, las solicitudes que completan operaciones complejas podrían exceder el tiempo de espera del servidor de 180 segundos, lo que hace que la API muestre una respuesta de error 408 o 504.

Si una solicitud responde con cualquiera de estos códigos de error, te recomendamos que vuelvas a intentar estas solicitudes con la estrategia de retirada exponencial.

Si el error persiste, comunícate con el equipo de asistencia a través del formulario de contacto.