我们有一个流程,我们已经实现了一个soap客户端来向服务提供商发送soap消息。
如果失败,我们需要重试服务调用3次。所以我们在内部使用HTTP Outbound Endpoint直到成功范围。
正在按预期进行重试,但是在成功的情况下,即使我们从服务获得响应,我们也会观察到超时错误,如下所示。
[DispatchThread:1] org.apache.cxf.endpoint.ClientImpl:等待响应操作{http://support.cxf.module.mule.org/}调用超时。
观察:
我已经删除了直到成功并直接拥有HTTP Outbound端点,在这种情况下没有超时错误。
我后来尝试过,直到成功并有一个承认表达式接受回复,仍然同时响应。
failureExpression =“#[message.inboundProperties ['http.status']!= 200]”ackExpression =“#[message.correlationId]”
任何人都可以建议,如何配置成功接受响应,而不是浪费时间错误。
答案 0 :(得分:2)
ackExpression
与“接受响应”无关,它用于生成在流已将当前事件传递给until-successful
消息后将用作新消息有效内容的值处理器。
尝试在出站HTTP端点上设置response-timeout
以查看它是否有帮助:可能在until-successful
范围的上下文中使用的默认超时太大并且会产生此问题。
答案 1 :(得分:1)
我找到了解决方案。
之前我在Until-Successful中只有HttpOutbound端点,我正面临Timeout问题。
现在我将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>
感谢大卫和所有人的回复。