如何在Java中为BigQuery API请求设置超时

pgi*_*cek 7 java google-app-engine google-bigquery

有时,当我们轮询BigQuery作业时,我们的请求最终会得到SocketTimeoutException.您可以在下面看到引发异常的代码.

this.bigquery.jobs().get(projectNumber, jobId).execute();
Run Code Online (Sandbox Code Playgroud)

这是我们得到的错误消息.

...
Caused by: java.net.SocketTimeoutException:
Timeout while fetching URL: https://www.googleapis.com/bigquery/v2/projects/######/jobs/######
...
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有办法延长超时.有谁知道默认超时是什么?

Jor*_*ani 7

您可以将凭证对象包装在禁用(或扩展)超时的HTTP初始化程序中.也就是说,你现在有这个:

Credential credential = ...
Bigquery bigquery = new Bigquery(HTTP_TRANSPORT, JSON_FACTORY, credential);
Run Code Online (Sandbox Code Playgroud)

你能做到的

final Credential credential = ...
HttpRequestInitializer initializer = new HttpRequestInitializer() {
  public void initialize(HttpRequest request) {
    credential.initialize(request);
    request.connectTimeout = request.readTimeout = 0;
  }
}
Bigquery bigquery = new Bigquery(HTTP_TRANSPORT, JSON_FACTORY, initializer);
Run Code Online (Sandbox Code Playgroud)

对BigQuery的对象的javadoc,为BigQuery的对象创建实例,对于HttpRequestInitializer超载.