通过基于Spring的JMS进行长时间远程执行时的异常

时间:2014-02-18 21:15:19

标签: java spring jms activemq spring-remoting

我通过JMS使用Spring远程处理:

客户端     

<bean id="requestQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="request"/>
</bean>

<bean id="dispatcher"
      class="org.springframework.jms.remoting.JmsInvokerProxyFactoryBean">
    <property name="serviceInterface" value="x.Dispatcher"/>
    <property name="connectionFactory" ref="connectionFactory"/>
    <property name="queue" ref="requestQueue"/>
</bean>

服务器     

<bean id="requestQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="request"/>
</bean>

<bean id="dispatcher" class="org.springframework.jms.remoting.JmsInvokerServiceExporter">
    <property name="serviceInterface" value="x.Dispatcher"/>
    <property name="service">
        <bean class="com.brtel.btwp.dispatcher.DispatcherImpl"/>
    </property>
</bean>

<bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory"/>
    <property name="destination" ref="requestQueue"/>
    <property name="concurrentConsumers" value="10"/>
    <property name="messageListener" ref="dispatcher"/>
</bean>

它的工作正常。但是如果服务器上的方法超过30秒,我就有异常,服务器会停止处理任何其他请求。

异常

2014-02-19 01:07:04.421 [080-exec-6] ERROR com.brtel.btwp.service.EventProcessorImpl           - Event processing error: 
org.springframework.remoting.RemoteAccessException: Could not access JMS invoker queue [queue://request]; nested exception is org.apache.activemq.ConnectionFailedException: The JMS connection has failed: java.io.EOFException
    at org.springframework.jms.remoting.JmsInvokerClientInterceptor.convertJmsInvokerAccessException(JmsInvokerClientInterceptor.java:431)
    at org.springframework.jms.remoting.JmsInvokerClientInterceptor.invoke(JmsInvokerClientInterceptor.java:204)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at com.sun.proxy.$Proxy32.process(Unknown Source)
    at com.brtel.btwp.service.EventProcessorImpl.processEvent(EventProcessorImpl.java:37)
    at com.brtel.btwp.metadata.form.FormPageController.processAction(FormPageController.java:172)
    at com.brtel.btwp.metadata.form.FormPageController$1.onEvent(FormPageController.java:70)
    at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:2746)
    at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2717)
    at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2658)
    at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:136)
    at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1765)
    at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1550)
    at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1260)
    at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:603)
    at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:485)
    at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:494)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1813)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.activemq.ConnectionFailedException: The JMS connection has failed: java.io.EOFException
    at org.apache.activemq.ActiveMQConnection.checkClosedOrFailed(ActiveMQConnection.java:1466)
    at org.apache.activemq.ActiveMQConnection.deleteTempDestination(ActiveMQConnection.java:2075)
    at org.apache.activemq.command.ActiveMQTempDestination.delete(ActiveMQTempDestination.java:52)
    at org.springframework.jms.remoting.JmsInvokerClientInterceptor.doExecuteRequest(JmsInvokerClientInterceptor.java:372)
    at org.springframework.jms.remoting.JmsInvokerClientInterceptor.executeRequest(JmsInvokerClientInterceptor.java:251)
    at org.springframework.jms.remoting.JmsInvokerClientInterceptor.invoke(JmsInvokerClientInterceptor.java:201)
    ... 34 more
Caused by: java.io.EOFException
    at org.apache.activemq.transport.nio.NIOTransport.serviceRead(NIOTransport.java:98)
    at org.apache.activemq.transport.nio.NIOTransport$1.onSelect(NIOTransport.java:69)
    at org.apache.activemq.transport.nio.SelectorSelection.onSelect(SelectorSelection.java:94)
    at org.apache.activemq.transport.nio.SelectorWorker$1.run(SelectorWorker.java:119)
    ... 3 more

例外2

2014-02-19 01:07:04.455 [1616@65006] ERROR mework.jms.listener.SimpleMessageListenerContainer  - Encountered non-recoverable JMSException
javax.jms.JMSException: java.io.EOFException
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)
    at org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1969)
    at org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:1988)
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101)
    at org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:126)
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101)
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101)
    at org.apache.activemq.transport.WireFormatNegotiator.onException(WireFormatNegotiator.java:160)
    at org.apache.activemq.transport.AbstractInactivityMonitor.onException(AbstractInactivityMonitor.java:332)
    at org.apache.activemq.transport.TransportSupport.onException(TransportSupport.java:96)
    at org.apache.activemq.transport.nio.NIOTransport.serviceRead(NIOTransport.java:98)
    at org.apache.activemq.transport.nio.NIOTransport$1.onSelect(NIOTransport.java:69)
    at org.apache.activemq.transport.nio.SelectorSelection.onSelect(SelectorSelection.java:94)
    at org.apache.activemq.transport.nio.SelectorWorker$1.run(SelectorWorker.java:119)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.io.EOFException
    ... 7 more

2014-02-19 01:07:04.421 [080-exec-6] ERROR X.EventProcessorImpl           - Event processing error: 
org.springframework.remoting.RemoteAccessException: Could not access JMS invoker queue [queue://request]; nested exception is org.apache.activemq.ConnectionFailedException: The JMS connection has failed: java.io.EOFException
    at org.springframework.jms.remoting.JmsInvokerClientInterceptor.convertJmsInvokerAccessException(JmsInvokerClientInterceptor.java:431)
    at org.springframework.jms.remoting.JmsInvokerClientInterceptor.invoke(JmsInvokerClientInterceptor.java:204)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at com.sun.proxy.$Proxy32.process(Unknown Source)
    at X.EventProcessorImpl.processEvent(EventProcessorImpl.java:37)
    at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:2746)
    at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2717)
    at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2658)
    at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:136)
    at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1765)
    at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1550)
    at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1260)
    at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:603)
    at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:485)
    at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:494)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1813)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.activemq.ConnectionFailedException: The JMS connection has failed: java.io.EOFException
    at org.apache.activemq.ActiveMQConnection.checkClosedOrFailed(ActiveMQConnection.java:1466)
    at org.apache.activemq.ActiveMQConnection.deleteTempDestination(ActiveMQConnection.java:2075)
    at org.apache.activemq.command.ActiveMQTempDestination.delete(ActiveMQTempDestination.java:52)
    at org.springframework.jms.remoting.JmsInvokerClientInterceptor.doExecuteRequest(JmsInvokerClientInterceptor.java:372)
    at org.springframework.jms.remoting.JmsInvokerClientInterceptor.executeRequest(JmsInvokerClientInterceptor.java:251)
    at org.springframework.jms.remoting.JmsInvokerClientInterceptor.invoke(JmsInvokerClientInterceptor.java:201)
    ... 34 more
Caused by: java.io.EOFException
    at org.apache.activemq.transport.nio.NIOTransport.serviceRead(NIOTransport.java:98)
    at org.apache.activemq.transport.nio.NIOTransport$1.onSelect(NIOTransport.java:69)
    at org.apache.activemq.transport.nio.SelectorSelection.onSelect(SelectorSelection.java:94)
    at org.apache.activemq.transport.nio.SelectorWorker$1.run(SelectorWorker.java:119)
    ... 3 more

你能否建议如何避免这种情况?谢谢!

0 个答案:

没有答案