У меня есть ESB, из которого я сделать WebService вызов, который отлично работает в большинстве случаев, но иногда я получаю НИЖЕ за исключениемMule Read таймаут исключение
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
странно то, после того, как я получаю это исключение, иногда HTTP-исходящий вызов по-прежнему преуспевает и несколько раз не удается
Почему это не соответствует?
есть ли вероятность того, что некоторая конфигурация на соединителе http-мула может помочь этому сценарию исключений вести себя последовательно?
Все, что я прошу, это ... как остановить HTTP-исходящий запрос от обработки после того, как выбрано исключение с учетом времени ожидания?
поток выглядит ниже показанного код
<queued-asynchronous-processing-strategy name="allow2Threads" maxThreads="2"/>
<flow name="TestFlow" processingStrategy="allow2Threads">
<vm:inbound-endpoint path="performWebserviceLogic" exchange-pattern="one-way" />
.... some transformation logic
....
<http:outbound-endpoint address="http://localhost:8080/firstwebservicecall" responseTimeout="65000" exchange-pattern="request-response"/>
....
.... some transformation logic on response...
<http:outbound-endpoint address="http://localhost:8080/secondWeberviceCall" responseTimeout="20000" exchange-pattern="request-response"/>
......some transformation logic on response...
<catch-exception-strategy>
<choice>
<when expression="#[groovy:message.getExceptionPayload().getRootException.getMessage().equals('Read timed out') and message.getSessionProperty('typeOfCall').equals('firstWeberviceCall')]">
.... unreliable ...result... as firstWeberviceCall may succeed even after the control comes here
and if we process http://localhost:8080/firstwebservicecall .. the transaction takes place twice... as already it succeeded above even after an exception is thrown
</when>
<when expression="#[groovy:message.getExceptionPayload().getRootException.getMessage().equals('Read timed out') and message.getSessionProperty('typeOfCall').equals('secondWeberviceCall')]">
..... reliable ... if control comes here and if we process http://localhost:8080/secondWeberviceCall .. the transaction takes place only once
</when>
<when expression="#[groovy:message.getExceptionPayload().getRootException.getMessage().equals('Connect timed out') and message.getSessionProperty('typeOfCall').equals('firstWeberviceCall')]">
....reliable
</when>
<when expression="#[groovy:message.getExceptionPayload().getRootException.getMessage().equals('Connect timed out') and message.getSessionProperty('typeOfCall').equals('secondWeberviceCall')]">
....reliable
</when>
</choice>
</catch-exception-strategy>
</flow>
Вы можете поделиться конфигурации потока. Было бы легче захватить ваш контекст. –
Вы проверяете код состояния, полученный после каждого 'http: outbound-endpoint'? –
Я не проверял его .. но я думаю, что он должен быть 500, когда он приземлился в блоке catch. Но вызов oubound оказывается успешным, когда я проверяю базу данных. Поэтому iam не обрабатывает firstwebservicecall снова в блоке catch, который решает бизнес-логика ... но технически это неправильно, я чувствую ... –