Zeitlimits und Wiederholungsversuche konfigurieren

Viele Display- und Video 360-API-Methoden führen komplexe Vorgänge aus, die unter Umständen länger dauert es einige Sekunden. Anfragen an diese Methoden können manchmal erwartete Latenz, was zu Fehlern auf API- oder Clientseite führt. Auf dieser Seite finden Sie Best Practices für den Umgang mit Problemen, die durch längere Anfragelatenz verursacht werden.

Standardzeitlimit in der Clientbibliothek erhöhen

Einige spezifische Methoden sind in der Referenzdokumentation gekennzeichnet. dass die erwartete Latenz regelmäßig überschritten wird. Andere Methoden könnten ebenfalls mit hoher Latenz.

Die standardmäßigen Zeitlimitlimits für einige Clientbibliotheken können zu Fehlern führen, wenn für Anfragen mit hoher Latenz. Standardzeitüberschreitungen für einen Teil der unterstützten Clients Bibliotheken sind:

  • Java: 20 Sekunden
  • Python: 60 Sekunden
  • PHP: 60 Sekunden

Clientseitige Zeitüberschreitungen können durch Erhöhung dieser Standardzeitüberschreitungen vermieden werden. Folgen dieser Anleitung, um das Standardzeitlimit für Ihre Clientbibliothek während Laufzeit:

Java

  1. Erforderliche Ressourcen importieren

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. Build-Funktion zum Festlegen des HTTP-Zeitlimits

    /**
     * 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. Funktion beim Erstellen der Display- und Video 360 API-Client.

    // 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. Importieren Sie das HTTP-Modul der Python-Clientbibliothek der Google API.

    from googleapiclient import http
    
  2. Aktualisieren Sie die standardmäßige Zeitüberschreitungskonstante.

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. Erstellen Sie einen API-Dienst.

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

PHP

  1. Laden Sie die Guzzle-HTTP-Bibliothek mit Composer

    composer require guzzlehttp/guzzle:^7.0
    
  2. Erstellen Sie einen Guzzle-HTTP-Client und weisen Sie einen Wert für die Zeitüberschreitung zu.

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. Erstellen Sie einen Google-Client und weisen Sie den Guzzle-HTTP-Client zu.

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

API-Zeitüberschreitungsfehler beheben

In seltenen Fällen können Anfragen für komplexe Vorgänge die serverseitiges Zeitlimit von 180 Sekunden, sodass die API 408 oder 504 zurückgibt Fehlerantwort.

Wenn eine Anfrage mit einem dieser Fehlercodes beantwortet wird, empfehlen wir, dass Sie Wiederholen Sie diese Anfragen mit der Strategie des exponentiellen Backoffs.

Wenn der Fehler weiterhin auftritt, wenden Sie sich über das Kontaktformular an den Support.