2013-10-30 5 views
6

Wir haben einen Ablauf, wo wir einen Soap-Client implementiert haben, um Soap-Nachrichten an Service-Provider zu senden.Timeout-Fehler in Bis erfolgreich

Wir müssen den Serviceanruf dreimal wiederholen, wenn es fehlschlägt. Daher haben wir den HTTP Outbound Endpoint innerhalb des erfolgreichen Bereichs verwendet.

Es wird versucht, wie erwartet, aber im Falle eines Erfolgsszenarios, beobachten wir einen Timeout-Fehler wie folgt, auch wenn wir die Antwort vom Dienst erhalten.

[DispatchThread: 1] org.apache.cxf.endpoint.ClientImpl: für Reaktion auf den Betrieb Timeout beim Warten {http://support.cxf.module.mule.org/} aufzurufen.

Beobachtung:

ich das bis erfolgreich entfernt worden und hatte den HTTP Outbound Endpunkt direkt, in diesem Fall gibt es keine Timeout-Fehler.

Ich versuchte später, bis erfolgreich und hatte einen Bestätigungsausdruck, um die Antwort zu akzeptieren, immer noch die gleiche Zeit Antwort.

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

Könnte jemand bitte vorschlagen, wie man Konfigurieren Sie den Vorgang bis zum erfolgreichen Akzeptieren der Antwort und nicht zum Auswerfen des Zeitfehlers.

+0

Bitte fügen Sie Ihre Flusskonfiguration hinzu. – user1760178

Antwort

2

ackExpression hat nichts mit "accept the response" zu tun, es ist für das Generieren eines Werts, der als neue Nachrichtennutzlast verwendet wird, nachdem der Nachrichtenfluss das aktuelle Ereignis an den Nachrichtenprozessor until-successful übergeben hat.

Versuchen Sie, einen response-timeout auf Ihrem ausgehenden HTTP-Endpunkt einzustellen, um zu sehen, ob es hilft: Vielleicht ist das Standard-Timeout im Kontext des Bereichs until-successful zu groß und verursacht dieses Problem.

+0

Dank David, wir haben versucht, die Zeitüberschreitung zu reduzieren, es funktioniert manchmal und Fehler einige Male werfen, gibt es kein konsistentes Verhalten. Haben wir einen Standard oder eine Berechnung, um die Antwortzeit festzulegen? – Kaaviraaj

+0

Dies ist nicht logisch. Können Sie versuchen, 'keep-alive =" false "' auf dem ausgehenden HTTP-Endpunkt hinzuzufügen? Versuchen Sie auch, 'keepSendSocketOpen =" false "' auf dem HTTP-Connector hinzuzufügen. –

+0

Ich habe das versucht, immer noch die gleiche Antwort. Wie ich bereits erwähnt habe, beobachte ich dieses Problem nur, wenn wir den HTTP-Outbound-Endpunkt innerhalb von "Bis erfolgreich abgeschlossen" haben, ansonsten funktioniert es gut.Aber wir müssen solange erfolgreich sein, wie wir Wiederholungsversuche für Verbindungsfehler durchführen müssen. – Kaaviraaj

1

Ich habe eine Lösung dafür gefunden.

Früher hatte ich nur HttpOutbound-Endpunkt innerhalb Bis-Erfolgreich und ich bin Timeout-Problem konfrontiert.

Nun habe ich auch Seife Komponente im Inneren enthalten Bis zum erfolgreichen Umfang funktioniert es gut.

Da bis zum erfolgreichen uns nur eine Komponente im Inneren haben, habe ich Seife Komponente und HttpOutbound Endpunkt eine Prozessorkette eingewickelt.

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

Danke David und alles für Ihre Antworten.

Verwandte Themen