2017-02-19 20 views
1

В Jaxrs (например, WebClient) мы можем установить время ожидания подключения и тайм-аут чтения.Jaxrs возможность установить глобальный таймаут (connect + read)

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); 

Я хотел бы установить тайм-аут, который включает в себя как я на самом деле не волнует, сколько времени тратится на подключение или в получении, мое требование, чтобы получить ответ на Х секунд или просто отказаться от поиска ,

ответ

1

С CXF невозможно установить максимальный тайм-аут для запроса, учитывающего как продолжительность соединения, так и время приема. Максимальное время ожидания для запроса будет:

maximum_timeout = connection_timeout + receive_timeout 

Смотрите этот же вопрос для Apache HTTP client. Обходной путь может заключаться в том, чтобы установить таймер в отдельном потоке, чтобы прервать соединение, когда истекает нужный максимальный таймаут

+0

Может быть, через перехватчик ?, но я не знаю, можно ли это сделать. – cocorossello

+1

Я просмотрел 'WebClient' javadoc и он невозможно отменить текущий запрос, поэтому невозможно использовать перехватчик, потому что он будет выполнен в том же потоке, что и основной запрос (и основной поток блокируется до ответа/таймаута). Вам нужно будет создать дополнительный поток мониторинга с тайм-аутом и работать асинхронно, в обоих случаях: тайм-аут или правильный ответ. Подумайте, стоит ли ... – pedrofb

Смежные вопросы