使用嵌入式ActiveMQ的JUnit测试抛出javax.jms.JMSException:对等停止

使用嵌入式ActiveMQ的JUnit测试抛出javax.jms.JMSException:对等停止,activemq,junit4,spring-jms,Activemq,Junit4,Spring Jms,我有一个使用ActiveMQ消息的java应用程序。我有使用嵌入式ActiveMQ(版本:5.10.0)的JUnit测试用例。测试用例执行良好,但在执行后抛出此错误。我尝试使用最新版本(5.14.0),但抛出了错误。但是5.8.0没有错误。我看到了一个描述ActiveMQ版本5.6.0的相同问题的解决方案,但没有看到解决方案。感谢您的投入 @Bean public ConnectionFactory jmsConnectionFactory() { ActiveMQConnectionF

我有一个使用ActiveMQ消息的java应用程序。我有使用嵌入式ActiveMQ(版本:5.10.0)的JUnit测试用例。测试用例执行良好,但在执行后抛出此错误。我尝试使用最新版本(5.14.0),但抛出了错误。但是5.8.0没有错误。我看到了一个描述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:37083警告[org.springframework.jms.connection.CachingConnectionFactory][ActiveMQ连接执行器:vm://my amq host#0][301]遇到JMSException-重置基础jms连接 javax.jms.jmsceception:peer(vm://my-amq-host#1)已停止。 位于org.apache.activemq.util.jmsceptionsupport.create(jmsceptionsupport.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) 运行(Thread.java:745) 原因:org.apache.activemq.transport.TransportDisposedIOException:peer(vm://my amq host#1)已停止。 ... 9更多


我的猜测是,测试代码的运行方式是,连接工厂在创建与VM传输的连接时(如果没有运行,则创建一个in-VM代理),实际上是在完全清理和关闭in-VM代理之前捕获它的实例。但是,如果没有完整地查看测试代码,就很难确定

通常,让测试创建您可以控制的自己的BrokerService,并让工厂使用带有
create=false
URI选项的VM传输是一个好主意