2016-03-12 2 views
0

Это мой основной mule flow:Mule - HTTP Post - Тайм-аут Превышен

HTTP Listener>Logger>Http Request>Logger (Result сообщение)

<http:request-config name="HTTP_Request_Configuration" host="localhost" port="8080" doc:name="HTTP Request Configuration" usePersistentConnections="false"/> 
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/> 
<flow name="servoy-restFlow"> 
    <http:listener config-ref="HTTP_Listener_Configuration" 
     path="/" doc:name="HTTP" /> 
    <logger message="#[message.payloadAs(java.lang.String)]" level="INFO" 
     doc:name="Logger" /> 
    <http:request config-ref="HTTP_Request_Configuration" 
     path="service/rest/request" method="POST" 
     doc:name="HTTP" /> 
    <logger message="#[message.payloadAs(java.lang.String)]" level="INFO" 
     doc:name="Logger" /> 
</flow> 

Но он возвращает ошибку о тайм-аута исключения:

******************************************************************************** 
Exception stack is: 
1. Timeout exceeded (java.util.concurrent.TimeoutException) 
    com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider:426 (null) 
2. Error sending HTTP request. Message payload is of type: String (org.mule.api.MessagingException) 
    org.mule.module.http.internal.request.DefaultHttpRequester:287 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html) 
******************************************************************************** 
Root Exception stack trace: 
java.util.concurrent.TimeoutException: Timeout exceeded 
    at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider.timeout(GrizzlyAsyncHttpProvider.java:426) 
    at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider$3.onTimeout(GrizzlyAsyncHttpProvider.java:274) 
    at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:398) 
    at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:377) 
    at org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:158) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

******************************************************************************** 

Что делать, чтобы избежать таймаута?

ответ

4

default таймаут HTTP outbound request составляет 30 секунд, указанные в ms в муле. Увеличьте время ожидания конфигурации http-request дольше 30 секунд, может начаться с 40 секунд и посмотреть, что именно вы хотите.

<http:request-config responseTimeout="40000" .../> 
2

Попробуйте увеличить время ожидания в:

<http:request-config responseTimeout="XYZ" /> 
0

Принимая другой подход к этой проблеме ...

Есть ли у вас проблемы с услугой, которую вы пытаетесь потреблять, и это не отвечает. Я всегда считал, что тайм-аут по умолчанию достаточно (даже для вызова внешних служб).

1

Вы можете установить тайм-аут для всего вашего приложения настройки глобального свойства тайм-аута на умолчанию используется именно в начале вашего .xml, в примере:

<configuration defaultTransactionTimeout="90000" defaultResponseTimeout="90000" doc:name="Configuration"> 
    <default-threading-profile poolExhaustedAction="RUN"/> 
</configuration> 

Я надеюсь, что это помогает.

0

Где вы получаете запрос POST - возможно, метод или микропоток, есть действия, которые происходят сначала, и после этого выполняется POST. Если вы не можете изменить логику и удалить их, просто увеличьте время ожидания в конфигурации запроса в Mule.

Смежные вопросы