【问题标题】:Mule - HTTP Post - Timeout ExceededMule - HTTP Post - 超时
【发布时间】:2016-06-27 19:21:27
【问题描述】:

这是我的基本mule flow

HTTP Listener > Logger > Http Request > Logger(结果消息)

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

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

我应该怎么做才能避免超时?

【问题讨论】:

    标签: http post timeout mule httprequest


    【解决方案1】:

    在您收到 POST 请求的地方 - 可能是一个方法或微流,首先会发生一些操作,然后执行 POST。如果您无法更改那里的逻辑并删除它们,只需在 Mule 中增加请求配置的超时时间即可。

    【讨论】:

      【解决方案2】:

      您可以为整个应用程序设置超时,在 .xml 开头配置全局默认超时属性,例如:

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

      我希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        http outbound requestdefault 超时时间是在 mule 中的 ms 中指定的 30 秒。将 http-request 配置的超时时间增加到大于 30 秒,可能是从 40 秒开始,看看你想要的数字是多少。

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

        【讨论】:

          【解决方案4】:

          对这个问题采取另一种方法...

          您尝试使用的服务是否存在问题并且没有响应。我一直发现默认超时就足够了(即使是调用外部服务)。

          【讨论】:

            【解决方案5】:

            尝试增加超时时间:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-22
              • 1970-01-01
              • 1970-01-01
              • 2013-03-17
              • 2014-06-23
              相关资源
              最近更新 更多