Как подтверждается в ответе, связанном в вашем вопросе, в одном из комментариев @ df778899 и в соответствии с моими тестами, приведенное ниже использование работает нормально, для джерси клиента
target(baseUrl)
.property(ClientProperties.CONNECT_TIMEOUT, 1000)
.property(ClientProperties.READ_TIMEOUT, 1000)
И выдает java.net.SocketTimeoutException
, если внешний сервер не отвечает в течение установленного времени.
Для, Apache CXF клиента, я протестировал приведенный ниже фрагмент, и он работает для тайм-аутов чтения. И это официальная ссылка . Найдите параметры, использованные в приведенном ниже фрагменте на этой странице.
Примечание : для версий, с которых это было поддержано, отметьте JIRA .
target(baseUrl)
.property("http.connection.timeout", 5000)
.property("http.receive.timeout", 5000)
Обновление : OP может не требовать нижеследующего содержимого, но сохраняет его для академических целей. .
Я догадываюсь, что вы преследуете другую цель. Мне кажется, что ваша внешняя система на самом деле реагирует, но, возможно, со скоростью, меньшей, чем вы хотели бы, ИЛИ сам ответ больше, что, в свою очередь, потребляет больше времени, чем вы хотите?
В таких случаях вы можете настроить параметры тайм-аута. Но они работают на основе периодического чтения сокетов. Итак, учтите, что вы установили таймаут на X
, а ваши данные ответа - Y
байтов. Медленное чтение может означать, что вызов socket.read () поступает с данными, но их содержимое составляет 1/2 байта. X
относится к каждому чтению. Таким образом, полное чтение теоретически может занять X*Y
мс.
Если выше действительно ваша проблема, то вам, возможно, придется решить ее с помощью внешнего хронометриста. Например, вы можете:
- Выполнить внешний сервисный вызов через ExecutorService.submit (Callable задача)
- И затем, вызовите результат Future.get (длительный тайм-аут, единица времени)