在测试中使用jmsTemplate receive时,不会杀死Solace JMS出口流

时间:2018-06-18 12:27:27

标签: jms spring-integration spring-jms solace

我正在使用CachingConnectionFactory以类似的方式创建JmsTemplate:

@Bean
public JmsTemplate replyJmsTemplate() {
    JmsTemplate jmsTemplate = new JmsTemplate();
    jmsTemplate.setConnectionFactory(...<CachingConnectionFactory>...);
    jmsTemplate.setDeliveryPersistent(...);
    jmsTemplate.setExcplicitQosEnabled();
    jmsTemplate.setTimeToLive(...);
}

比我在测试类中调用receiveSelected:

replyJmsTemplate.receiveSelected(...);

我在每个测试课中都这样做。当我得到预期的消息时,我的测试结束了,我想要关闭当前的出口流(到队列)。但事实并非如此。我按顺序执行所有测试类(大约70个类),因此我有70个出口流程处于活动状态。在所有测试完成后释放所有出口流。因此,有时我达到最大出口流量,在我的服务器上设置为100。我的问题是如何在每次测试执行后关闭出口流量?我想我可以在测试中手动关闭会话但我无法从jmsTemplate中检索会话。

3 个答案:

答案 0 :(得分:3)

由于您提到JmsTemplate@Bean,我可以猜测您在JUnit测试中使用了Spring Testing Framework。为此,您应该考虑在每个测试课程结束后关闭ApplicaitonContext@DirtiesContext来寻求帮助:

 * Test annotation which indicates that the
 * {@link org.springframework.context.ApplicationContext ApplicationContext}
 * associated with a test is <em>dirty</em> and should therefore be closed
 * and removed from the context cache.

https://docs.spring.io/spring/docs/5.0.7.RELEASE/spring-framework-reference/testing.html#dirtiescontext

答案 1 :(得分:2)

如果每个类都有自己的Spring @Configuration,请为每个测试类添加@DirtiesContext - 它将关闭测试应用程序上下文,从而破坏连接工厂。

答案 2 :(得分:0)

最后,我只是使用SingleConnectionFactory,以便在每个测试用例完成之后终止每个会话。