【问题标题】:JUnit tests using embedded ActiveMQ throws javax.jms.JMSException: peer stopped使用嵌入式 ActiveMQ 的 JUnit 测试抛出 javax.jms.JMSException: peer 已停止
【发布时间】:2017-02-01 16:22:03
【问题描述】:

我有一个使用来自 ActiveMQ 的消息的 Java 应用程序。我有使用嵌入式 ActiveMQ(版本:5.10.0)的 JUnit 测试用例。测试用例执行良好,但在执行后抛出此错误。我尝试使用最新版本(5.14.0)并抛出错误。不过 5.8.0 没有错误。我看到related thread 描述了 ActiveMQ 版本 5.6.0 的相同问题,但看不到解决方案。感谢您的投入。

@Bean
public ConnectionFactory jmsConnectionFactory() {
    ActiveMQConnectionFactory amqConnectionFactory = new ActiveMQConnectionFactory("vm://my-amq-host");
    CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(amqConnectionFactory);
    cachingConnectionFactory.setCacheConsumers(false);
    return cachingConnectionFactory;
}

2016-09-23 13:53:37,083 WARN [org.springframework.jms.connection.CachingConnectionFactory][ActiveMQ Connection Executor: vm://my-amq-host#0][301] 遇到 JMSException - 重置底层 JMS 连接 javax.jms.JMSException: 对等 (vm://my-amq-host#1) 已停止。 在 org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:54) 在 org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1998) 在 org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:2017) 在 org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101) 在 org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:126) 在 org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101) 在 org.apache.activemq.transport.vm.VMTransport.stop(VMTransport.java:206) 在 org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:65) 在 org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:65) 在 org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:132) 在 org.apache.activemq.broker.TransportConnection.doStop(TransportConnection.java:1102) 在 org.apache.activemq.broker.TransportConnection$4.run(TransportConnection.java:1068) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) 原因:org.apache.activemq.transport.TransportDisposedIOException: peer (vm://my-amq-host#1) 已停止。 ... 9 更多

【问题讨论】:

    标签: activemq junit4 spring-jms


    【解决方案1】:

    我的猜测是,测试代码的运行方式是,连接工厂在创建与 VM 传输的连接时会创建一个虚拟机内代理(如果没有运行的话)实际上是在捕获一个虚拟机内的实例经纪人在它完全清理并关闭之前。如果没有完全看到测试代码,很难确定。

    让测试创建它自己的 BrokerService 并让工厂使用带有 create=false URI 选项的 VM 传输通常是个好主意。

    【讨论】:

      猜你喜欢
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 2017-07-12
      • 2012-12-28
      相关资源
      最近更新 更多