不稳定的 javax.jms.JMSException:同行已处置

问题描述 投票:0回答:3

我在使用 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.
java jms activemq
3个回答
5
投票

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

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

另一方面,您说异常“切断执行”...这可能意味着这与您的问题不同...

更新

任何遇到无法通过升级 ActiveMQ 修复且与关闭无关的“对等处置”异常的人(请参阅无法使用内置 BrokerService.stop 调用关闭嵌入式 activeMQ 服务),应考虑提交错误报告.


3
投票

看来发帖者的问题完全不同。该链接提到了一条嘈杂的 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中测试过)。


0
投票

这是版本兼容性问题,该异常是由于 Spring boot 版本和 Active MQ 版本不兼容而导致的

所以对于 Spring Boot 版本 3.1.3 我已经安装了 ActiveMQ 5.18.2 版本,它已自动解决

2023-09-15T18:00:15.675+05:30 INFO 2200 --- [ main] c.nt.BootMsp2PProducerApp1Application :使用 PID 2200 的 Java 17.0.4.1 启动 BootMsp2PProducerApp1Application (D:\WORKSPACE\BootMSP2P-ProducerApp-1 arge

© www.soinside.com 2019 - 2024. All rights reserved.