6

我们有一个流程,我们已经实现了一个肥皂客户端来向服务提供者发送肥皂消息。

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

它正在按预期进行重试,但在成功的情况下,即使我们从服务获得响应,我们也会观察到如下超时错误。

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

观察:

我已成功删除 until 并直接拥有 HTTP Outbound 端点,在这种情况下没有超时错误。

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

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

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

4

2 回答 2

2

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

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

于 2013-10-30T21:49:32.557 回答
1

我找到了解决方案。

早些时候,我在直到成功中只有 HttpOutbound 端点,我面临超时问题。

现在我在直到成功的范围内也包含了 Soap 组件,它工作正常。

由于在成功之前只允许我们在其中包含一个组件,因此我将soap 组件和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> 

感谢大卫和大家的回复。

于 2013-11-01T18:41:23.320 回答