不稳定的javax.jms.JMSException:Peer处理掉了

时间:2011-05-20 23:49:19

标签: java jms activemq

我对Java JMS有一个不稳定的问题。 对于瞬间工作正常,但不规则地抛出以下异常并削减执行。

重要的是要注意,这不会停止经纪人。

javax.jms.JMSException: Peer (vm://test#1) disposed.
        at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)
        at org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1773)
        at org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:1790)
        at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:99)
        at org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:114)
        at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:99)
        at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:203)
        at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
        at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.activemq.transport.TransportDisposedIOException: Peer (vm://test#1) disposed.

2 个答案:

答案 0 :(得分:3)

我认为 这个问题与ActiveMQ:https://issues.apache.org/jira/browse/AMQ-2902

这个问题跟踪器线程说它是无害的(它只是一个嘈杂的INFO级别日志消息),并且它在ActiveMQ 5.4.2中得到修复。

另一方面,你说异常“削减了执行” ...... 可以意味着这是一个与你不同的问题... < / p>

<强>更新

任何通过升级ActiveMQ而无法解决的“对等处置”异常,并且与关闭无关(请参阅Unable to shutdown embedded activeMQ service using the built in BrokerService.stop call)应该考虑提交错误报告。

答案 1 :(得分:2)

看起来海报的问题完全不同了。该链接提到了一个嘈杂的INFO级别日志消息,但上面(这也是我得到的)是一个抛出的JMSException,它有Caused by:子句中的这些附加行。

    at org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:88)
    at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68)
    at org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
    at org.apache.activemq.ActiveMQConnection.doAsyncSendPacket(ActiveMQConnection.java:1275)
    ... 31 more

奇怪的是,在它到达这一点之前有一个connection.isClosed()检查。所以连接是开放的,但“同伴”仍处于打开状态。通过在线研究其他可能的答案,唯一可能的解决方案是与代理的连接完好无损,但特定队列可能会被关闭。

对于我特别类似的情况,这发生在经纪人停止时,但消费者和生产者仍在尝试建立连接。有时连接仍将被视为开放(即,即使代理已停止,未关闭)。修复这个以确保经纪人没有解决我的问题。

我还想补充说我在ActiveMQ 5.6中看到的这个问题(但我没有在5.8中测试过)。