2016-02-10 4 views
0

У меня возникла проблема с настройкой таймаута соединения на HTTP-коннекторе запросов (не путать с таймаутом ответа) с Mule 3.7. Конфигурация, которую я использую, не меняет эту произвольную ~ 5-секундную задержку между инициированием соединения и бросанием «java.net.ConnectException: время ожидания соединения», даже если https://docs.mulesoft.com/mule-user-guide/v/3.7/tcp-transport-reference предполагает, что настройка атрибута connectionTimeout должна делать трюк.Mule - Время ожидания соединения

Что мне не хватает? Есть ли другой способ указать этот тайм-аут? Или это зависит от ОС?

Flow ilustrating проблемы:

<mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:tcp="http://www.mulesoft.org/schema/mule/tcp" xmlns:tls="http://www.mulesoft.org/schema/mule/tls" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd 
http://www.mulesoft.org/schema/mule/tls http://www.mulesoft.org/schema/mule/tls/current/mule-tls.xsd 
http://www.mulesoft.org/schema/mule/tcp http://www.mulesoft.org/schema/mule/tcp/current/mule-tcp.xsd 
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd"> 
    <http:request-config name="HTTP_Request_Configuration" host="123.123.123.123" port="4444" doc:name="HTTP Request Configuration" responseTimeout="30000" usePersistentConnections="false" > 
     <tcp:client-socket-properties connectionTimeout="30000" timeout="30000"/> 
    </http:request-config> 
    <flow name="connectionTimeoutTestFlow"> 
     <quartz:inbound-endpoint jobName="Knock" repeatInterval="60000" responseTimeout="100000" doc:name="Quartz"> 
      <quartz:event-generator-job/> 
     </quartz:inbound-endpoint> 
     <logger message="Start Request" level="INFO" doc:name="Logger"/> 
     <http:request config-ref="HTTP_Request_Configuration" path="/debug/index.jsp" method="GET" doc:name="HTTP"/> 
    </flow> 
</mule> 

Выход:

INFO 2016-02-10 12:53:55,736 [[connectionTimeoutTest].connectionTimeoutTestFlow.stage1.02] org.mule.api.processor.LoggerMessageProcessor: Start Request 
ERROR 2016-02-10 12:54:01,321 [[connectionTimeoutTest].connectionTimeoutTestFlow.stage1.02] org.mule.exception.DefaultMessagingExceptionStrategy: 
******************************************************************************** 
Message    : Error sending HTTP request. Message payload is of type: NullPayload 
Type     : org.mule.api.MessagingException 
Code     : MULE_ERROR--2 
Payload    : {NullPayload} 
JavaDoc    : http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html 
******************************************************************************** 
Exception stack is: 
1. Connect timeout (java.net.ConnectException) 
    org.glassfish.grizzly.connectionpool.SingleEndpointPool$ConnectCompletionHandler:1283 (null) 
2. java.net.ConnectException: Connect timeout (java.util.concurrent.ExecutionException) 
    org.glassfish.grizzly.impl.SafeFutureImpl$Sync:349 (null) 
3. java.util.concurrent.ExecutionException: java.net.ConnectException: Connect timeout (java.io.IOException) 
    org.mule.module.http.internal.request.grizzly.GrizzlyHttpClient:234 (null) 
4. Error sending HTTP request. Message payload is of type: NullPayload (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.net.ConnectException: Connect timeout 
    at org.glassfish.grizzly.connectionpool.SingleEndpointPool$ConnectCompletionHandler.cancelled(SingleEndpointPool.java:1283) 
    at org.glassfish.grizzly.impl.SafeFutureImpl.notifyCompletionHandlers(SafeFutureImpl.java:185) 
    at org.glassfish.grizzly.impl.SafeFutureImpl.done(SafeFutureImpl.java:277) 
    at org.glassfish.grizzly.impl.SafeFutureImpl$Sync.innerCancel(SafeFutureImpl.java:389) 
    at org.glassfish.grizzly.impl.SafeFutureImpl.cancel(SafeFutureImpl.java:247) 
    at org.glassfish.grizzly.connectionpool.SingleEndpointPool$ConnectTimeoutWorker.doWork(SingleEndpointPool.java:1351) 
    at org.glassfish.grizzly.connectionpool.SingleEndpointPool$ConnectTimeoutWorker.doWork(SingleEndpointPool.java:1343) 
    at org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:158) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571) 
    at java.lang.Thread.run(Thread.java:744) 

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

ответ

0

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

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

Надеюсь, это поможет.

0

Попробуйте увеличить время ожидания HTTP в HTTP глобальной конфигурации, вы можете сделать что-то, как показано ниже:

<https:connector 
    name="HTTP_HTTPS" 
    cookieSpec="netscape" 
    validateConnections="false" 
    sendBufferSize="0" 
    receiveBufferSize="0" 
    receiveBacklog="0" 
    clientSoTimeout="1000" 
    serverSoTimeout="1000" 
    socketSoLinger="1000" 
    doc:name="HTTP-HTTPS" 
    socketMaxWait="1000" 
    connectionTimeout="1000" 
    keepAlive="true">