2013-10-30 19 views
6

我们有一个流程,我们已经实现了一个肥皂客户端向服务提供者发送肥皂消息。超时错误直到成功

如果失败,我们需要重试服务呼叫3次。所以我们在内部使用了HTTP Outbound Endpoint,直到成功范围。

它按预期做了重试,但是在成功的情况下,即使我们得到服务的响应,我们仍然在观察超时错误,如下所示。

[DispatchThread:1] org.apache.cxf.endpoint.ClientImpl:超时等待响应于操作{http://support.cxf.module.mule.org/}调用。

观察:

我已删除了,直到成功,直接过的HTTP出站端点,在这种情况下,没有超时错误。

我后来尝试过,直到成功,并有一个确认表达式来接受响应,仍然是同一时间响应。

failureExpression = “#[message.inboundProperties [ 'http.status']!= 200]” ackExpression = “#[message.correlationId]”

可以在任何一个请建议,如何配置直到成功接受响应并且不抛出超时错误。

+0

请添加您的流量配置。 – user1760178

回答

2

ackExpression与“接受响应”无关,它用于在流程已将当前事件传递给消息处理器后,生成将用作新消息负载的值。

尝试在您的出站HTTP端点上设置response-timeout以查看是否有帮助:可能在until-successful范围的上下文中使用的默认超时值太大并且会造成此问题。

+0

感谢大卫,我们已经尝试减少超时,它有时会工作,并且抛出错误有时,没有一致的行为。我们是否有任何标准或计算来设置响应超时? – Kaaviraaj

+0

这不合逻辑,你可以尝试在HTTP出站端点上添加'keep-alive =“false”'吗?也可以尝试在HTTP连接器上添加'keepSendSocketOpen =“false”'。 –

+0

我试过了,还是一样的回应。正如我所提到的,我观察到这个问题,只有当我们的HTTP Outbound端点在Untill-Successful内时,否则它工作正常。但是我们需要直到成功,因为我们必须重新尝试连接失败。 – Kaaviraaj

1

我找到了解决方案。

此前,我只有HttpOutbound端点内的直接成功,我面临超时问题。

现在我包括肥皂组件也内直到成功范围它工作正常。

因为直到成功让我们只有一个组件内部,我已经包装肥皂组件和HttpOutbound端点是一个处理器链。

<until-successful objectStore-ref="objectStore" 
      maxRetries="3" secondsBetweenRetries="2" deadLetterQueue-ref="xxxx" 
      doc:name="UntilSuccessfulService" >     
      <processor-chain doc:name="Processor Chain"> 
       <cxf:jaxws-client operation="Request1" serviceClass="xxxxxxx" enableMuleSoapHeaders="true" doc:name="SOAP"/> 
       <http:outbound-endpoint exchange-pattern="request-response" method="POST" doc:name="HTTP" host="localhost" path="cService" port="xxxx" connector-ref="HTTP_HTTPS"/>     
      </processor-chain>     
    </until-successful> 

感谢大卫和所有人的回应。