【问题标题】:how to set timeout for: `google-client spreadsheet api`?如何设置超时:`google-client 电子表格 api`?
【发布时间】:2017-10-29 10:33:10
【问题描述】:

我正在为电子表格使用 google-client api。

我在 20 秒后暂停。如何将超时设置为自定义值?

private Sheets initService(GoogleCredential credential) throws GeneralSecurityException, IOException {
    final HttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

    return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
            .setApplicationName("my_app")
            .build();
}

我应该把它设置在HttpTransport吗?

【问题讨论】:

    标签: java google-api timeout spreadsheet httptransportse


    【解决方案1】:

    我遇到了同样的问题,实际上从谷歌找到了一个记录在案的解决方案

    Google API Client Libraries - Timeouts and Errors

    为简单起见,您的实现必须添加一个调用:

    .setHttpRequestInitializer(createHttpRequestInitializer(credential))
    

    在 Sheets.Builder 中然后将以下方法添加到您的类中,提供任何对应用程序来说似乎合理的超时值。

        private HttpRequestInitializer createHttpRequestInitializer(final HttpRequestInitializer requestInitializer) {
        return new HttpRequestInitializer() {
            @Override
            public void initialize(final HttpRequest httpRequest) throws IOException {
                requestInitializer.initialize(httpRequest);
                httpRequest.setConnectTimeout(3 * 60000); // 3 minutes connect timeout
                httpRequest.setReadTimeout(3 * 60000); // 3 minutes read timeout
            }
        };
    }
    

    【讨论】:

      【解决方案2】:
      private Sheets initService(GoogleCredential credential) throws GeneralSecurityException, IOException {
          final HttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
          final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
      
      return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, setTimeout(credential, 60000))
              .setApplicationName("my_app")
              .build();
      }
      
      private HttpRequestInitializer setTimeout(final HttpRequestInitializer initializer, final int timeout) {
          return request -> {
              initializer.initialize(request);
              request.setReadTimeout(timeout);
          };
      }
      

      【讨论】:

        猜你喜欢
        • 2011-03-01
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 2019-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-04
        相关资源
        最近更新 更多