Настройка таймаутов и повторов

Многие методы API Display & Video 360 выполняют сложные операции, выполнение которых может занять больше нескольких секунд. Запросы к этим методам иногда могут превышать ожидаемую задержку, вызывая ошибки на стороне API или клиента. На этой странице перечислены методы решения проблем, вызванных увеличенной задержкой запроса.

Увеличьте тайм-аут по умолчанию в клиентской библиотеке.

Несколько конкретных методов были помечены в справочной документации как регулярно превышающие ожидаемую задержку. Другие методы также могут периодически демонстрировать поведение с высокой задержкой.

Ограничения времени ожидания по умолчанию для некоторых клиентских библиотек могут привести к ошибкам при выполнении запросов с большой задержкой. Тайм-ауты по умолчанию для подмножества поддерживаемых клиентских библиотек:

  • Ява : 20 секунд
  • Питон : 60 секунд
  • PHP : 60 секунд

Таймаутов на стороне клиента можно избежать, увеличив эти таймауты по умолчанию. Следуйте этим инструкциям, чтобы настроить время ожидания по умолчанию для вашей клиентской библиотеки во время выполнения:

Ява

  1. Импортируйте необходимые ресурсы.

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. Создайте функцию для установки тайм-аута 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. Вызовите функцию при создании клиента API 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();
    

Питон

  1. Импортируйте http-модуль клиентской библиотеки Google API Python.

    from googleapiclient import http
    
  2. Обновить константу тайм-аута по умолчанию.

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. Создайте службу API.

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

PHP

  1. Загрузите и установите HTTP-библиотеку Guzzle с помощью Composer .

    composer require guzzlehttp/guzzle:^7.0
  2. Создайте HTTP-клиент Guzzle, назначив значение таймаута.

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. Создайте клиент Google и назначьте HTTP-клиент Guzzle.

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

Обработка ошибок тайм-аута API

В редких случаях запросы, выполняющие сложные операции, могут превышать тайм-аут на стороне сервера в 180 секунд, в результате чего API возвращает ответ с ошибкой 408 или 504 .

Если в ответ на запрос выдается любой из этих кодов ошибки, мы рекомендуем повторить эти запросы, используя стратегию экспоненциальной задержки .

Если ошибка не исчезнет, ​​обратитесь в службу поддержки, используя контактную форму .