Mule上的AMQPConnector - SocketException:打开的文件过多

时间:2016-11-30 08:18:20

标签: sockets mule amqp connector

我使用 Mule应用程序 AMQPConnector 工作了很长时间。 在几天之前,我看到错误:打开文件太多,崩溃,并且在我重新启动Mule应用程序之前无法发送请求。

骡子代码是这样的:(关键部分)

<amqp:connector name="AMQPConnector" validateConnections="true" 
            doc:name="AMQPConnector" host="x.x.x.x" port="5672"
            password="xxxxx" username="xxx">
            <reconnect-forever frequency="1000" blocking="false" />

来自流程:

<flow name="first">
   <http:listener config-ref="HTTP_Listener_Configuration" path="order/submit" doc:name="HTTP"/>
   <byte-array-to-object-transformer doc:name="Byte Array to Object"/>
   <json:object-to-json-transformer doc:name="Object to JSON"/>
   <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
   <set-session-variable value="#[payload]" variableName="order" doc:name="Session Variable" />
   <set-payload doc:name="order" value="#[payload.info]" />
   <amqp:outbound-endpoint queueName="xxxx"                            
                        responseTimeout="100000" exchange-pattern="request-response" 
                        connector-ref="AMQPConnector" doc:name="XXXX" />
   <object-to-string-transformer doc:name="Object to String"/>
   <logger message="response from queue #[payload]"
                level="INFO" doc:name="Logger" />
</flow>

<flow name="second">
    <amqp:inbound-endpoint queueName="xxxx"
        responseTimeout="10000" exchange-pattern="request-response"
        connector-ref="AMQPConnector" doc:name="AMQP-0-9" />    
    <byte-array-to-object-transformer doc:name="Byte Array to Object" />
    <json:object-to-json-transformer doc:name="Object to JSON" />

    <http:request config-ref="HTTP_Request_XXXX" host="#[sessionVars['partUrl']]"  path="#[sessionVars['path']]" method="#[sessionVars['method']]" doc:name="HTTP">
       <http:request-builder>
            <http:header headerName="#[sessionVars['key']]" value="#[sessionVars['value']]"/>
       </http:request-builder>
   </http:request>  
</flow>

错误例外日志为:

2016-11-27 04:30:12,272 [amqpReceiver.1018] ERROR org.mule.exception.CatchMessagingExceptionStrategy - 
Message               : Error sending HTTP request. Message payload is of type: String
Code                  : MULE_ERROR--2

Exception stack is:
1. Too many open files (java.net.SocketException) sun.nio.ch.Net:-2 (null)
2. java.net.SocketException: Too many open files (java.util.concurrent.ExecutionException)
  org.glassfish.grizzly.impl.SafeFutureImpl$Sync:349 (null)
3. java.util.concurrent.ExecutionException: java.net.SocketException: Too many open files (java.io.IOException)
  org.mule.module.http.internal.request.grizzly.GrizzlyHttpClient:223 (null)
4. 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.net.SocketException: Too many open files
at sun.nio.ch.Net.socket0(Native Method)
at sun.nio.ch.Net.socket(Net.java:411)
at sun.nio.ch.Net.socket(Net.java:404)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)

http-listner接受了请求,系统已停止。

可能错过一个配置,或者关闭连接.... (我在解决方案中看到了相同的问题,增加了系统或在java类中添加代码等等...... - 它没有帮助我,我没有java类。)

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

这是Anypoint Studio的一个问题。不幸的是,您的操作系统只能打开这么多文件。根据您的操作系统,此限制会有所不同,但是我使用最新的Anypoint Studio(5到6)在Ubuntu和macOS中遇到了同样的问题。

我可以建议的最好的事情是重新启动并尝试在使用Anypoint时将打开的文件保持在最低点。当我一次只处理4-5个文件时,我通常可以整整一天而不需要重新启动。

由于使用频繁,我最终需要在5小时内重新启动。