【问题标题】:Change READ TIMEOUT for a batch HTTP Request on using Google API Client Library for Java在使用适用于 Java 的 Google API 客户端库时更改批量 HTTP 请求的 READ TIMEOUT
【发布时间】:2015-09-27 13:05:37
【问题描述】:

我正在批量请求将成员添加到组。为此,我使用 OAuth2.0 并获取类类型 Credential 的对象。执行时,batch.execute() 会抛出一个

java.net.SocketTimeoutException : Read timed out

要更改超时限制,这是我找到的解决方案: GoogleApps client giving SocketTimeOutException only

但我无法更改我正在创建的凭据对象的超时时间。

Credential credential = new AuthorizationCodeInstalledApp(
                flow, new LocalServerReceiver()).authorize("user");

注意:凭据实现 HttpRequestInitializer。

提前致谢!

【问题讨论】:

    标签: java google-api-java-client google-admin-sdk google-directory-api


    【解决方案1】:

    找了好久才发现!批处理 HTTP 和对 Google 的原子 HTTP 请求有一个单独的 HttpRequestInitializer 对象。我之前更改了原子请求的 HttpRequestInitializer 对象(期望对批处理请求有相同的影响),如下所示:

    new Directory.Builder(
                    HTTP_TRANSPORT, JSON_FACTORY,new HttpRequestInitializer() {
                @Override
                public void initialize(HttpRequest httpRequest) throws IOException {
                    credential.initialize(httpRequest);
                    httpRequest.setConnectTimeout(3);  // 3 minutes connect timeout
                    httpRequest.setReadTimeout(3);  // 3 minutes read timeout
                    System.out.println("Hello"); // Just to track when a http request is made.
    
                }
            }).setApplicationName(APPLICATION_NAME).build();
    

    这导致了原子请求的设置读取超时。使用batch.execute() 发送的批处理请求仍然具有默认的读取超时。 为了对批处理请求进行相同的更改,我在 BatchRequest intializaiton 中进行了更改:

    BatchRequest batch = service.batch(new HttpRequestInitializer() {
                    @Override
                    public void initialize(HttpRequest request) throws IOException {
                        credential.initialize(request);
                        request.setConnectTimeout(10 * 60000);
                        request.setReadTimeout(10 * 60000);
                        System.out.println(request.getReadTimeout() + 2); //Just to track when a batch http request is made.
                    }
                });
    

    【讨论】:

    • 超时值应该以毫秒为单位。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2016-01-30
    相关资源
    最近更新 更多