2013-10-30 45 views
6

Mamy przepływ, w którym zaimplementowaliśmy klienta mydła, aby wysyłać wiadomości z mydłem do dostawcy usług.Błąd limitu czasu do momentu pomyślnego wykonania

Musimy powtórzyć zgłoszenie serwisowe 3 razy, jeśli nie powiedzie się. Używaliśmy HTTP Outbound Endpoint wewnątrz, aż do pomyślnego zasięgu.

Wykonuje ponowienie zgodnie z oczekiwaniami, ale w przypadku sukcesu, nawet jeśli otrzymamy odpowiedź z usługi, obserwujemy błąd przekroczenia czasu, jak poniżej.

[DispatchThread: 1] org.apache.cxf.endpoint.ClientImpl: przekroczenie czasu oczekiwania na odpowiedź na działanie {http://support.cxf.module.mule.org/} wywołania.

Obserwacja:

mam usunięto aż powodzeniem i miał bezpośredni punkt końcowy HTTP wychodzących, w tym przypadku nie ma błędu limitu czasu.

Później próbowałem mieć do czasu pomyślnego wykonania i miał wyrażenie potwierdzające, aby przyjąć odpowiedź, wciąż w tym samym czasie odpowiedzi.

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

Może ktoś proszę sugerować, Dlaczego konfiguruj, aż zakończy się powodzeniem, aby zaakceptować odpowiedź i nie wyrzucać błędu limitu czasu.

+0

Dodaj swoją konfigurację przepływu. – user1760178

Odpowiedz

2

Numer nie ma nic wspólnego z "zaakceptuj odpowiedź", służy do generowania wartości, która będzie używana jako nowy ładunek komunikatu po tym, jak przepływ przeszedł bieżące zdarzenie do procesora wiadomości until-successful.

Spróbuj ustawić response-timeout na wyjściowym punkcie końcowym HTTP, aby sprawdzić, czy pomaga: być może domyślny limit czasu użyty w kontekście zakresu until-successful jest zbyt duży i powoduje powstanie tego problemu.

+0

Dzięki David, Próbowaliśmy zmniejszyć czas oczekiwania, czasami działa i czasami popełnia błąd, nie ma spójnego zachowania. Czy mamy jakiś standard lub obliczenia, aby ustawić czas reakcji? – Kaaviraaj

+0

To nie jest logiczne, czy możesz spróbować dodać 'keep-alive =" false "' na wyjściowym wychodzącym HTTP? Spróbuj także dodać 'keepSendSocketOpen =" false "' na złączu HTTP. –

+0

Próbowałem tego, wciąż tę samą odpowiedź. Jak już wspomniałem, obserwuję ten problem, tylko jeśli mamy punkt końcowy HTTP wychodzący wewnątrz Untill-Successful, w przeciwnym razie działa dobrze.Ale potrzebujemy do powodzenia, ponieważ musimy ponawiać próby niepowodzeń połączenia. – Kaaviraaj

1

Znalazłem rozwiązanie tego problemu.

Wcześniej miałem tylko punkt końcowy HttpOutbound wewnątrz do momentu pomyślnego zakończenia i mam problem z limitem czasu.

Teraz dodałem komponent Soap również do zakresu Until-successful, który działa dobrze.

Od tego momentu, dopóki nie uda nam się uzyskać tylko jeden komponent, zawijam komponent mydła, a punkt końcowy HttpOutbound jest łańcuchem procesorów.

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

Dzięki David i wszystkim za twoje odpowiedzi.