2014-10-01 65 views
0

我用,直到成功为止范围面临的问题,使用情况如下骡子重试使用,直到外部Web服务调用过程中成功的范围如果服务停止

骡子流包含: 入境:HTTP端点

出站:http呼出外部网络服务

我设计的流程,使得我在内部定义了我的外部Web服务调用,直到成功范围,要求是,如果外部服务停止并且应该停止重试,该服务已启动并正在运行

我无法实现这一目标。

需要的投入如何,我可以acheive它也是正确的failureExpression需要被定义untillsuccessful范围。

骡子版本(3.5.1) - Anypoint工作室 - 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> 
+0

Mule version,config,或者我们无能为力。 – 2014-10-01 15:12:46

回答

0

正如我们前面讨论的那样我曾尝试与失败基于表达式的状态码组合。在这里,重试此happing正确的。但问题是,如果重试次数之前提供远程服务,是没有得到执行的仍是重试继续和流量。

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

+0

'头:INBOUND'是超级老过时的骡子表达式语法,使用MEL来代替:http://www.mulesoft.org/documentation/display/current/Mule+Expression+Language+MEL – 2014-10-06 15:47:03

+0

喜大卫,我们既尝试MEL使用message.inboundproperties并且还与上述MEL表达 – 2014-10-07 03:34:24

+0

事情是:如果远程HTTP端点失败,就没有'http.status'入站端点因此上述表达式本身可能因为'null'值的失败。 – 2014-10-07 16:32:52

2

如果没有exception,目前的故障表现将NPE。检查这样的婚姻无效:

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

exception.causedBy(java.net.SocketException异常))]”

您可能需要手动逃避&&amp;取决于你如何进入这个表达

+0

嗨大卫,感谢您的回复,我尝试了你提到的失败表达。但在外部HTTP服务调用的情况下,它不能按预期工作,并且在重试之间处于活动状态。即使服务在重试期间仍在运行,直到成功的范围仍然重试,直到配置的时间为止。需要你的输入如何解决。 – Mohan 2014-10-06 06:46:18