配置超时和重试

许多 Display & Video 360 API 方法执行复杂的操作,可能需要几秒钟以上才能完成。对这些方法的请求有时可能会超出预期延迟时间,导致 API 或客户端出现错误。本页面列出了处理由请求延迟时间延长导致的问题的做法。

增加客户端库中的默认超时

一些特定方法在其参考文档中被标记为经常超过预期延迟时间。其他方法也可能会定期出现高延迟行为。

在发出高延迟请求时,某些客户端库的默认超时限制可能会导致错误。部分受支持的客户端库的默认超时为:

  • Java:20 秒
  • Python:60 秒
  • PHP:60 秒

提高这些默认超时值可以避免客户端超时。请按照以下说明,在运行时调整客户端库的默认超时:

Java

  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. 在创建 Display & Video 360 API 客户端时调用函数。

    // 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. 导入 Google API Python 客户端库 http 模块。

    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. 使用 Composer 下载并安装 Guzzle HTTP 库。

    composer require guzzlehttp/guzzle:^7.0
    
  2. 创建 Guzzle HTTP 客户端,并分配超时值。

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. 创建 Google 客户端并分配 Guzzle HTTP 客户端。

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

处理 API 超时错误

在极少数情况下,完成复杂操作的请求可能会超过服务器端超时时间(180 秒),从而导致 API 返回 408504 错误响应。

如果请求在响应时返回其中任一错误代码,我们建议您使用指数退避算法策略重试这些请求。

如果错误仍然存在,请使用联系表单与支持团队联系。