He reunido un hasta exitoso en Mule 3.7 (ver más abajo):

<until-successful maxRetries="100" failureExpression="#[exception != null &amp;&amp; (exception.causedBy(java.net.ConnectException) || exception.causedBy(java.net.SocketTimeoutException)) || message.inboundProperties['http.status'] != 500]" synchronous="true" millisBetweenRetries="20000" doc:name="UntilSuccess">

<processor-chain>

  <set-payload value="#[flowVars.operationPayLoad]" doc:name="GetTransactionRequest" />

  <ws:consumer config-ref="GetTransactionWSConsumerConfig" operation="execute" doc:name="GetTransaction" />
</processor-chain>

Solo estoy interesado en realizar el reintento hasta que tenga éxito si un servicio web no funciona o si se agota el tiempo de espera. El hasta que tenga éxito no debe volver a intentar ninguna otra excepción.

Sin embargo, hice una prueba en la que obtengo una org.mule.module.ws.consumer.SoapFaultException, pero hasta que el éxito sigue intentando llamar al servicio web.

¿Cómo le digo a la aplicación hasta que tenga éxito que ignore todas las excepciones y deje de intentarlo, excepto cuando el servicio web no funcione o se agote el tiempo de espera?

Salud

Máximo

0
max 21 jul. 2016 a las 12:42

2 respuestas

La mejor respuesta

Como se especifica en la documentación de MuleSoft, el alcance Hasta que tenga éxito volverá a intentarlo si se encuentra una excepción o la expresión de falla es verdadera. La expresión de error no anula el comportamiento predeterminado.

2
Damian Calabresi 26 oct. 2017 a las 20:28

¿Cuál es el valor de message.inboundProperties['http.status'] en su prueba?

Además, intente poner paréntesis:

#[(exception != null && (exception.causedBy(java.net.ConnectException) || exception.causedBy(java.net.SocketTimeoutException))) || message.inboundProperties['http.status'] != 500]

Es decir (cuando hay una excepción de cualquiera de esos dos tipos) o el estado es 500. [Paréntesis externo agregado a la verificación de excepción]

1
Manik Magar 21 jul. 2016 a las 14:37