shu*_*tsy 7 java activemq-classic jms
我的系统有以下几个部分:
到目前为止,在开发、测试和生产环境中一切正常。
我们刚刚在生产中连接了一个新的客户端系统,我们注意到它的日志开始报告“通道不活动太久”异常并断开连接。担心这个客户端的整体影响是它停止了代理上的所有消息消耗,从而使整个系统停止。
此客户端侦听器(使用 Spring 缓存连接工厂)似乎可以正常连接到 JMS 代理,处理一些消息,然后 3 分钟报告异常。在 ActiveMQ 中打开 DEBUG 并获得大量输出,但没有任何迹象表明同时在代理上出现警告或错误。
相信 ActiveMQ 有一些内部保持活动,即使不活动时间超过默认 30 秒,也应该保持连接。
基础设施人员已经监控了这个客户端的 VPN,并确认它一直保持连接状态。
不要相信代码或 Spring 配置有问题,因为我们在不同的客户端中有许多其他的侦听器实例,并且它们的行为都很好。
假设我真的有两个问题:
编辑 - 添加异常堆栈跟踪:
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
Run Code Online (Sandbox Code Playgroud)
您是否尝试过以下操作:
禁用 InactivityMonitor;wireFormat.maxInactivityDuration=0例如
网址: tcp://localhost:61616?wireFormat.maxInactivityDuration=0
如果您不想禁用,您是否尝试将其设置为较高的数字,例如:URL: tcp://localhost:61616?wireFormat.maxInactivityDuration=5000000 (just an example - use your own time in ms)
此外,请确保客户端和服务器的 jar 文件版本相同。
希望能帮助到你
| 归档时间: |
|
| 查看次数: |
23524 次 |
| 最近记录: |