Я создал службу CXF и установил таймауты для 120000ms = 2min
для обоих:
requestContext.put("javax.xml.ws.client.receiveTimeout", 120000);
requestContext.put("javax.xml.ws.client.connectionTimeout", 120000);
Он работает нормально, я тестировал его для 20s, 1min, 3min
- каждый раз он ждет ответа ровно столько времени.
Однако проблема возникает, когда я хочу установить его на 5min
. Сервис ожидает ответа только для ~240800ms = ~4min
.
Я звоню в сервис jboss esb. Этот длится максимум 5min
. Служба CXF вызывается изнутри простого приложения .jar
с моего ПК, поэтому между ними нет других серверов/контейнеров (например, tomcat и т. д.).
Любые идеи, чтобы исправить мои настройки тайм-аута?
Использование Apache CXF 3.0.1
ИЗМЕНИТЬ
То, что я понял теперь, когда я получаю 2 разных сообщения, зависит от моих настроек тайм-аута:
Если я установлю его на
<=4min
(с помощью моего метода или метода @pedrofb), по истечении этого времени я получаю:org.apache.cxf.interceptor.Fault: не удалось отправить сообщение. в org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64) в org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) в org.apache.cxf.endpoint.ClientImpl .doInvoke(ClientImpl.java:516)
Вызвано: java.net.SocketTimeoutException: исключение SocketTimeoutException, вызывающее http://esb:8080/MyService/ebws/Category/MyService: истекло время чтения
если я установлю его на
>4min
или0
, я получаю:javax.xml.ws.soap.SOAPFaultException: ответ для службы [Category:MyService] не получен, не повторять попытку.
Честно говоря, я довольно смущен тем, что является ожидаемым результатом (думаю, первым)
ИЗМЕНИТЬ 2
Я проверил MyService
через SoapUI
. Я установил тайм-аут 5min
и снимаю с запросом образца.
Опять же, после чуть более 4 минут я получаю:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
<env:Fault>
<faultcode>env:Server</faultcode>
<faultstring>No response received for service [Category:MyService], Told not to retry.</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>
Однако, когда я смотрю в журнал Jboss ESB, у меня нет исключений, нет ошибок, MyService
длится еще 1 минуту (около 5 минут) и возвращает нормальный ответ, что подтверждается инструментом аудита (который регистрирует каждый запрос к моему esb - с ответом и время).
Я думаю, что это указывает на то, что @pedrofb упомянул в комментарии. Любые предложения, что это может быть?
4,5min
с нормальным ожидаемым сообщением, тайм-аут сервера установлен на5 min
, что подтверждает, что - person countryroadscat   schedule 08.08.2016org.jboss.soa.esb.ws.timeout
в ESB - person pedrofb   schedule 08.08.2016240000
. Теперь все работает отлично. Можете ли вы отредактировать свой ответ, чтобы я мог его принять? Кстати, какой метод лучше установить тайм-ауты? ЧерезRequestContext
или как вы написали черезHttpClientPolicy
- person countryroadscat   schedule 08.08.2016RequestContext
не стандартизированы и могут измениться - person pedrofb   schedule 08.08.2016