2017-11-01 5 views
1

전체 코드가 아니라 내 문제의 코드 스 니펫을 게시하고 있습니다. 다음과 같이 HttpClientOptions을 설정했습니다.Vertx HttpClient가 시간 초과하지 않습니다.

HttpClientOptions clientOptions = new HttpClientOptions() 
       .setDefaultHost(host) 
       .setDefaultPort(port) 
       .setMaxPoolSize(config.getMaxPoolSize()) 
       .setConnectTimeout(config.getTimeout()); 
HttpClient httpClient = vertx.createHttpClient(clientOptions); 

그리고는 나는 다음과 같이 게시 요청이 클라이언트를 사용 :

httpClient.post(ePoint, httpClientResponse -> { 
      httpClientResponse.bodyHandler(body -> { 
        if (body.length() == 0) { 
         ctx.fail(); 
         return; 
        } 
        String bodyString = body.toString(); 
        int statusCode = httpClientResponse.statusCode(); 
        if (statusCode != HttpStatus.SC_CREATED) { 
         ctx.fail(); 
         return; 
        } 
        logger.info(ctx, "blah blah"); 


         ctx.next(); 

       }) 
       .exceptionHandler(throwable -> { 
        ctx.fail(); 
       }); 

을하지만 수신자 측 예외 핸들러에서 시뮬레이션에게 타임 아웃을 할 경우 호출되지 않습니다. 하지만 게시물 요청 예외 처리기에서 다음과 같이 시간 제한을 설정하면 예외가 발생합니다.

httpClient.post(ePoint, httpClientResponse -> { 
     httpClientResponse.bodyHandler(body -> { 
       if (body.length() == 0) { 
        ctx.fail(); 
        return; 
       } 
       String bodyString = body.toString(); 
       int statusCode = httpClientResponse.statusCode(); 
       if (statusCode != HttpStatus.SC_CREATED) { 
        ctx.fail(); 
        return; 
       } 
       logger.info(ctx, "blah blah"); 


        ctx.next(); 

      }).setTimeout(config.getTimeout()) 
      .exceptionHandler(throwable -> { 
       ctx.fail(); 
      }); 

이 버그는 Vertx 버그 또는 디자인입니다.

+0

내가 생각 설치에 요청 수준에서 제한 시간을 필요 [차이 - 사이 - 웹 서비스 연결 시간 제한 및 요청 - 타임 아웃] (https://stackoverflow.com/questions/34354525/difference -with-web-service-connection-timeout-and-request-timeout)은 차이점을 설명합니다. – Tharanga

답변

1

다음 접근 방식이 효과적입니다. 우리는

HttpClientOptions clientOptions = new HttpClientOptions() 
      .setDefaultHost(host) 
      .setDefaultPort(port) 
      .setMaxPoolSize(config.getMaxPoolSize()) 
      .setConnectTimeout(config.getTimeout()); 

HttpClient httpClient = vertx.createHttpClient(clientOptions); 


HttpClientRequest request = httpClient.request(HttpMethod.GET, url, response -> { 

    //process response 

}).exceptionHandler(e -> { 
    e.printStackTrace(); 
    comp.completeExceptionally(e); 
}); 

request.putHeader("content-type", "application/json") 
    .setTimeout(timeout).end(); 
+0

응답 해 주셔서 감사합니다. 예 해결 방법 인 것 같습니다. – Tharanga

관련 문제