【问题标题】:Embedded ActiveMQ for unit test is throwing JMSException when the test ends用于单元测试的嵌入式 ActiveMQ 在测试结束时抛出 JMSException
【发布时间】:2021-07-01 01:02:09
【问题描述】:

我正在使用嵌入式 activeMQ 进行带有 spring JMS 的 junit 测试。测试都通过了。但是当测试完成时,日志中会出现以下异常。如何解决日志中出现的此错误

javax.jms.JMSException: Disposed due to prior exception
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:72)
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1421)
at org.apache.activemq.ActiveMQConnection.close(ActiveMQConnection.java:688)
at org.springframework.jms.connection.SingleConnectionFactory.closeConnection(SingleConnectionFactory.java:501)
at org.springframework.jms.connection.SingleConnectionFactory.resetConnection(SingleConnectionFactory.java:389)
at org.springframework.jms.connection.CachingConnectionFactory.resetConnection(CachingConnectionFactory.java:205)
at org.springframework.jms.connection.SingleConnectionFactory.onException(SingleConnectionFactory.java:367)
at org.springframework.jms.connection.SingleConnectionFactory$AggregatedExceptionListener.onException(SingleConnectionFactory.java:721)
at org.apache.activemq.ActiveMQConnection$5.run(ActiveMQConnection.java:1967)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)                                                        
Caused by: org.apache.activemq.transport.TransportDisposedIOException: Disposed due to prior exception
at org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:125)
at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:114)
at org.apache.activemq.transport.vm.VMTransport.stop(VMTransport.java:233)
at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:72)
at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:72)
at org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:132)
at org.apache.activemq.broker.TransportConnection.doStop(TransportConnection.java:1194)
at org.apache.activemq.broker.TransportConnection$4.run(TransportConnection.java:1160)
... 3 common frames omitted
Caused by: org.apache.activemq.transport.TransportDisposedIOException: peer (vm://localhost#5) stopped.

单元测试类如下所示:

@SpringBootTest                                                         
public class CucumberSpringIntegration {
@Rule
public EmbeddedActiveMQBroker broker = new EmbeddedActiveMQBroker();
  @Test                                                                            
  public void someUnitTest(){
   //some assertions
  }

配置包含以下内容:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory    
java.naming.provider.url = vm://localhost?broker.persistent=false

参考来自这个链接activeMQ embedded Junit

【问题讨论】:

  • 请贴出完整的单元测试源代码。
  • @MattPavlovich 更新了原帖中的测试代码

标签: spring-boot activemq spring-jms spring-boot-test


【解决方案1】:

您需要为您的连接工厂添加预关闭挂钩。当您的代理在您的连接被破坏之前停止时,就会发生这种情况

@Rule
EmbeddedActiveMQBroker customizedBroker = new EmbeddedActiveMQBroker() {
    @Override
    protected void configure() {
        this.getBrokerService().setUseShutdownHook(true);
        this.getBrokerService().addPreShutdownHook(PROVIDE_SHUTDOWN_HOOK_HERE);
        // Perform additional configuration here...
    }
};

【讨论】:

  • 能否告诉我要在“PROVIDE_SHUTDOWN_HOOK_HERE”部分添加什么逻辑
猜你喜欢
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2012-12-13
  • 2017-02-17
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多