Как установить таймаут для: `API-таблицы google-client`?

Я использую API-интерфейс Google-клиента для электронных таблиц.

Я получаю тайм-аут после 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?

1 ответ

Я столкнулся с той же проблемой и нашел задокументированное решение от Google.

Клиентские библиотеки Google API - таймауты и ошибки

И для простоты ваша реализация должна добавить вызов:

.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
        }
    };
}
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);
    };
}
Другие вопросы по тегам