2017-02-19 6 views
1

Jaxrs (예 : WebClient)에서 우리는 연결 제한 시간과 읽기 제한 시간을 설정할 수 있습니다.글로벌 타임 아웃을 설정하는 Jaxrs 기능 (연결 + 읽기)

ClientConfiguration c = WebClient.getConfig(client); 
    HTTPConduit http = c.getHttpConduit(); 
    HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); 
    httpClientPolicy.setConnectionTimeout(timeout); 
    httpClientPolicy.setReceiveTimeout(timeout); 
    httpClientPolicy.setAllowChunking(false); 
    http.setClient(httpClientPolicy); 

내가 정말 연결 또는 수신에 소요되는 시간이 얼마나 걱정하지 않는다 모두를 포함하는 제한 시간을 설정하려는, 내 요구 사항은 X 초에 응답을하거나 검색을 폐기하는 것입니다 .

답변

1

CXF에서 연결 및 수신 기간을 모두 고려하는 요청에 대해 최대 시간 초과를 설정하는 방법은 없습니다. 요청의 최대 시간 초과는 다음과 같습니다.

maximum_timeout = connection_timeout + receive_timeout 

Apache HTTP client에 대해이 질문을보십시오. 해결 방법은 원하는 최대 시간 초과가 만료되었을 때 연결을 중단하기 위해 별도의 스레드에 타이머를 설정하는 것일 수 있습니다.

+0

아마도 인터셉터를 통해 가능합니까? 그렇지만 수행 가능한지 모르겠습니다. – cocorossello

+1

'WebClient' javadoc을 검토 한 결과 현재 요청을 중단 할 수 없으므로 인터셉터를 사용할 수 없습니다. 인터셉터는 기본 요청과 동일한 스레드에서 실행될 것이므로 인터셉터를 사용할 수 없기 때문입니다 (또한 응답/시간 초과까지 차단되는 기본 스레드). 시간 초과가있는 추가 모니터링 스레드를 생성하고 비동기 적으로 작업해야합니다 (시간 초과 또는 올바른 응답). 그것은 가치 있는지 여부를 고려 ... – pedrofb