2017-02-16 1 views
1

HttpAsyncRequestExecutor에 문제가 있습니다.Elasticsearch Rest Client - performRequestAsync 호출시 ConnectionClosedException

나는 elasticsearch Java Rest Client를 사용하고 있는데 난 항상 (아래 참조) 나는 performRequestAsync 호출 할 때 ConnectionClosedException 받고 있어요 : 여기

// variables (all with valid format): 
    // endpoint is just a List<String> with "14655/_search" 

    // params is just a Map<String, String> with 
    // "pretty", "true" 
    // "search_type", "query_then_fetch" 

    // entity is just a HttpEntity entity with the Json body request 

    final int numRequests = endpoints.size(); 
    final CountDownLatch latch = new CountDownLatch(numRequests); 
    try (Timer.Context ctx = this.requestTimer.time()) { 
     for (final String endpoint : endpoints) { 
      // ERROR hapens here: 
      restClient.performRequestAsync("GET", endpoint, params, entity, 
        new ResponseListener() { 

         @Override 
         public void onSuccess(final Response response) { 
          if (response != null) { 
           responses.add(response); 
           latch.countDown(); 
          } 
         } 

         @Override 
         public void onFailure(final Exception exception) { 
          latch.countDown(); 

          logger.error("could not get search results for....",exception); 
          exception.printStackTrace(); 
         } 
        }); 
     } 
    } 

예외 :

org.apache.http.ConnectionClosedException: Connection closed 
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.endOfInput(HttpAsyncRequestExecutor.java:341) 
at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:263) 
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81) 
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39) 
at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:116) 
at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:164) 
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:339) 
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:317) 
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:278) 
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:106) 
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:590) 
at java.lang.Thread.run(Thread.java:745) 

내가 무엇을 모르는 연결 닫기의 실제 원인입니다. 정확한 요청은 kopf에서 잘 작동하며 유효한 검색 결과를 반환합니다. 게다가, 나는 restClient.close() 또는 그와 비슷한 것을 부르지 않습니다.

어디에 문제가 있을지 생각해보십시오. 입력 끝이 닫힌 연결 상태를 가져 오는 원인입니까 (org.apache.http.nio.protocol.HttpAsyncRequestExecutor.endOfInput(conn)에 따른)? 그렇다면 입력은 무엇입니까?

감사

UPDATE :

이 코드는 통합 테스트에서 제대로 작동하기 때문에 문제가 (즉, 결과를 반환), Tomcat의 HttpClient 관련이 의심 ...하지만 그렇지 않습니다 나는 "바람둥이"배포 된 "인터페이스"를 통해 REST 요청을 할 때 같은 (ConnectionClosedException)을 얻습니다.

어떤 표시등이 켜져 있습니까?

답변

2

문제는 포트가 잘못되었습니다. REST 요청의 경우 포트는 9200이어야하며 (구성된 것처럼 9300이 아님) More info on elasticsearch ports.

elasticsearch가 더 정확한 오류 로그 또는 "올바른 포트로 연결하고 있습니까?"라는 힌트를 만들 수 있기를 바랍니다. 내장 클라이언트가 아닌 다른 것으로 9300 포트에 액세스하려고 할 때.

관련 문제