如果服务已关闭,则在外部Web服务调用期间,Mule将重试使用,直到成功范围

时间:2014-10-01 12:05:53

标签: mule

我面临问题,直到成功范围,用例如下

骡子流包含: 入站:http端点

出站:http出站呼叫外部Web服务

我设计了流量,以便我在内部定义我的外部Web服务调用,直到成功范围,要求是,如果外部服务关闭则需要重试,并且应该在服务启动和运行之间停止重试

我无法实现它。

必要的输入我如何实现它以及正确的失败需要为不成功的范围定义表达式。

Mule版本(3.5.1) - Anypoint Studio - 2014年7月

配置:

<until-successful
    maxRetries="3"
    doc:name="Until Successful"
    millisBetweenRetries="5000"
    failureExpression="#[exception.causedBy(java.net.ConnectException) ||
        exception.causedBy(java.net.SocketTimeoutException) ||
        exception.causedBy(java.net.SocketException)]" synchronous="true">
    <http:outbound-endpoint exchange-pattern="request-response"
        method="POST" address="http://localhost:8088/mockPriceSoapBinding"
        doc:name="HTTP" mimeType="text/html" tracking:enable-default-events="true" />
</until-successful>

2 个答案:

答案 0 :(得分:2)

如果没有exception,则当前失败表达式将为NPE。像这样检查无效:

failureExpression="#[exception != null && (exception.causedBy(java.net.ConnectException) || exception.causedBy(java.net.SocketTimeoutException) ||

exception.causedBy(java.net.SocketException异常))]&#34;

您可能需要在&中手动转义&amp;,具体取决于您输入此表达式的方式。

答案 1 :(得分:0)

正如我们之前讨论的那样,我已尝试使用基于状态代码的故障表达式组合。这里的重试是正确的。这里的问题是,如果远程服务在重试次数之前可用,则仍然会继续重试并且流程没有被执行。

失败表达式:#[header:INBOUND:http.status!= 200]