我有一个使用ActiveMQ消息的java应用程序。我有使用嵌入式ActiveMQ的JUnit测试用例(版本:5.10.0)。测试用例执行正常但在执行后抛出此错误。我尝试使用最新版本(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:peer(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) 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) 在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) at 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) at 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更多
答案 0 :(得分:0)
我的猜测是测试代码以这样的方式运行,即创建与VM传输的连接时连接工厂如果没有运行则创建一个虚拟机内代理实际上捕获一个虚拟机实例经纪人在完全清理并垮台之前。虽然没有完全看到测试代码,但很难确定。
通常一个好主意是让测试创建它自己的BrokerService,您可以控制它并让工厂使用带有create=false
URI选项的VM传输。