Исключения, которые вы увидите, будут ConnectTimeoutException
и SocketTimeoutException
.Фактические значения времени ожидания, которые вы используете, должны быть максимальным временем ожидания вашего приложения.Одно важное замечание о тайм-ауте чтения - это то, что он соответствует тайм-ауту чтения сокета.Таким образом, это не время, отведенное для получения полного ответа, а время, отведенное для чтения одного сокета.Таким образом, если имеется 4 чтения сокетов, каждое из которых занимает 9 секунд, ваше общее время чтения составляет 9 * 4 = 36 секунд.
Если вы хотите указать общее время получения ответа (включая соединение и общее чтениевремя), вы можете заключить вызов в поток и использовать для этого время ожидания потока.Например, я обычно делаю что-то вроде этого:
Future<T> future = null;
future = pool.submit(new Callable<T>() {
public T call() {
return executeImpl(url);
}
});
try {
return future.get(10, TimeUnit.SECONDS);
}
catch (InterruptedException e) {
log.warn("task interrupted", name);
}
catch (ExecutionException e) {
log.error(name + " execution exception", e);
}
catch (TimeoutException e) {
log.debug("future timed out", name);
}
Некоторые предположения, сделанные в приведенном выше коде: 1) это функция с параметром url, 2) она находится в классе с переменной name, 3) журнал - это экземпляр log4j, и 4) пул - это какой-то исполнитель пула потоков.Обратите внимание, что даже если вы используете тайм-аут потока, вы должны также указать тайм-аут соединения и сокета на HttpClient, чтобы медленные запросы не поглощали ресурсы в пуле потоков.Также обратите внимание, что я использую пул потоков, потому что обычно я использую это в веб-сервисе, поэтому пул потоков является общим для нескольких потоков Tomcat.Ваша среда может отличаться, и вы можете предпочесть просто создавать новый поток для каждого вызова.
Кроме того, я обычно вижу тайм-ауты, установленные через функции-члены параметров, например:
params.setConnectionTimeout(10000);
params.setSoTimeout(10000);
Но, возможно, ваш синтаксис также работает (не уверен).