내 응용 프로그램을 GAE에서 실행하고 있습니다. 이 응용 프로그램은 내 CloudML에 대한 REST 호출을 만듭니다. 여기 Google HTTP 클라이언트에서 ReadTimeout을 늘리는 방법
는 종종GoogleCredential credential = GoogleCredential.getApplicationDefault()
.createScoped(Collections.singleton(CLOUDML_SCOPE));
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
HttpRequestFactory requestFactory = httpTransport.createRequestFactory(
credential);
GenericUrl url = new GenericUrl(cloudMLRestUrl);
JacksonFactory jacksonFactory = new JacksonFactory();
JsonHttpContent jsonHttpContent = new JsonHttpContent(jacksonFactory, getPayLoad());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
jsonHttpContent.setWrapperKey("instances");
jsonHttpContent.writeTo(baos);
LOG.info("Executing request... " + baos.toString());
HttpRequest request = requestFactory.buildPostRequest(url, jsonHttpContent);
HttpResponse response = request.execute();
ReadTimeout 예외 코드에서, 상기 결과에 대한 코드이다.
java.net.SocketTimeoutException: Read timed out at
java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_121] at
java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
~[na:1.8.0_121] at
java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:1.8.0_121]
at
우리가 사용자 정의 타임 아웃 HttpRequestInitializer을 추가 할 수 있습니다 보이지만, 우리는 GoogleCredential있는 동안은 그러므로 내가 정의 HTTPRequestInitializer 사용할 수 없습니다 HttpRequestFactory HttpRequestFactory requestFactory = httpTransport.createRequestFactory(GoogleCredential);
을 만들 통과해야합니다. GoogleCredential HTTPRequestInitializer를 사용하여 생성 된 HttpRequestFactory에 대한 readTimeout을 늘리려면 어떻게해야합니까?
위의'''HttpRequestInitializer requestInitializer = request -> {credential.initialize (request);}와 같은 아래의 lamda를 사용했습니다. request.setReadTimeout (0);}; HttpRequestFactory requestFactory = httpTransport.createRequestFactory (requestInitializer);''' – sag
@sag : 물론 - 내 답변에 대안으로 추가 할 것입니다. –