我已经生成了一个 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
从我的 PC 的简单应用程序内部调用的,因此之间没有其他服务器/容器(如 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
or0
,我会得到: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 在评论中提到的。有什么建议吗?