我的系统有以下几个部分:
- ActiveMQ代理暴露在TCP端口61616
- 3个Grails的/春战争是活在自己的Tomcat服务器,他们发布和接收消息的JMS代理
- n次远程客户机系统与JMS侦听器组件来接收客户特定的消息,通过VPN使用主机名和端口61616连接到JMS代理
到目前为止,所有的工作在整个开发,测试和生产环境优良。
我们刚刚在连接生产新的客户端系统,我们已经注意到,它的日志开始报告“频道是不活动的时间太长”异常和断开连接。 这令人担忧一个客户端的整体效果是,它停止所有信息消费的经纪人这样带来的是整个系统停了下来。
此客户端监听器(使用Spring缓存连接工厂)出现连接到JMS代理确定,过程中的一些信息,然后3分钟异常报告。 在ActiveMQ中打开DEBUG,并得到输出的负载,没有任何提示就大约在同一时间经纪人警告或错误,但。
相信ActiveMQ的有一些内部保持活跃应该保持连接,即使处于非活动状态比默认的30秒。
基础设施家伙已经监控此客户端的VPN并确认熬夜和连接的全部时间。
不要认为这是代码或Spring配置是有过错的,因为我们有不同的客户端听众的许多其他情况下,他们都循规蹈矩的罚款。
假设我有2个问题真:
- 是什么原因造成“通道无效”异常?
- 为什么这个例外在一个单一的客户端停止工作ActiveMQ的?
编辑 - 添加异常堆栈跟踪:
2013-04-24 14:02:06,359 WARN - Encountered a JMSException - resetting the underlying JMS Connection (org.springframework.jms.connection.CachingConnectionFactory)
javax.jms.JMSException: Channel was inactive for too (>30000) long: jmsserver/xxx.xx.xx.xxx:61616
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)
at org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1833)
at org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:1850)
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.InactivityMonitor.onException(InactivityMonitor.java:266)
at org.apache.activemq.transport.InactivityMonitor$4.run(InactivityMonitor.java:186)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:693)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:719)
at java.lang.Thread.run(Thread.java:813)
Caused by: org.apache.activemq.transport.InactivityIOException: Channel was inactive for too (>30000) long: jmsserver/xxx.xx.xx.xxx:61616
... 4 more