2013-10-30 7 views
6

Abbiamo un flusso in cui abbiamo implementato un client soap per inviare messaggi di sapone al fornitore di servizi.Errore di timeout in Fino a quando riuscito

Abbiamo bisogno di riprovare la chiamata di servizio per 3 volte se fallisce. Quindi abbiamo utilizzato l'endpoint in uscita HTTP all'interno fino all'ambito di successo.

Sta facendo riprovare come previsto, ma in caso di scenario di successo, anche se otteniamo la risposta dal servizio, stiamo osservando un errore di timeout come di seguito.

[DispatchThread: 1] org.apache.cxf.endpoint.ClientImpl: Timeout durante l'attesa per la risposta al funzionamento {} http://support.cxf.module.mule.org/ invocano.

Osservazione:

Ho rimosso il successo fino a quando e aveva direttamente l'endpoint HTTP in uscita, in questo caso non v'è alcun errore di timeout.

Successivamente ho provato ad avere fino a buon esito e aveva un'espressione di accettazione per accettare la risposta, sempre la stessa risposta di timeout.

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

qualcuno potrebbe si prega di suggerire, su come configurare l'errore fino a quando non si accetta la risposta e non si genera un errore di timeout.

+0

Aggiungi la configurazione del flusso. – user1760178

risposta

2

Il ackExpression non ha nulla a che fare con "accetta la risposta", è per generare un valore che verrà utilizzato come nuovo carico utile del messaggio dopo che il flusso ha passato l'evento corrente al processore di messaggi until-successful.

Provare a impostare un response-timeout sull'endpoint HTTP in uscita per vedere se è d'aiuto: forse il timeout predefinito utilizzato nel contesto dell'ambito until-successful è troppo grande e crea questo problema.

+0

Grazie David, abbiamo provato a ridurre il timeout, a volte funziona e genera un errore alcune volte, non c'è un comportamento coerente. Abbiamo uno standard o un calcolo per impostare il timeout della risposta? – Kaaviraaj

+0

Non è logico, puoi provare ad aggiungere 'keep-alive =" false "' sull'endpoint in uscita HTTP? Prova anche ad aggiungere 'keepSendSocketOpen =" false "' sul connettore HTTP. –

+0

Ho provato questo, ancora la stessa risposta. Come ho detto, sto osservando questo problema, solo se abbiamo un endpoint HTTP in uscita in Untill-Successful, altrimenti funziona correttamente.Ma abbiamo bisogno fino al successo, come dobbiamo fare tentativi di tentativi di connessione falliti. – Kaaviraaj

1

Ho trovato una soluzione per questo.

In precedenza avevo solo endpoint HttpOutbound dentro Until-Successful e sto affrontando il problema del timeout.

Ora ho incluso anche il componente Soap all'interno dello scope Fino a quando ha funzionato correttamente.

Dal momento che fino a quando non ci ha consentito di avere solo un componente all'interno, ho inserito il componente sapone e l'endpoint HttpOutbound è una catena di processori.

<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> 

Grazie David e tutto per le vostre risposte.