与Spring SingleConnectionFactory和CachingConnectionF

2019-10-16 12:22发布

请一些帮助了解以下内容:

我使用CachingConnectionFactory在我的应用程序,并在我的测试中JMS首先用它来测试我的JMS配置一样保证的交付,回滚/提交等。

我使用Spring的JmsTemplate发送和DefaultMessageListenerContainer在分娩过程中。

  1. 我注意到这一点使用几种测试方法运行的顺序实施例时是硬/不可能的:在消息侦听(消费者侧)测试方法AI抛出异常,使得发生的重试。 然后检验B运行和方法AI做了不同的测试,但是当我开始这个测试我仍然可以重新尝试从测试A,这我清楚地不想要的消息。 我清除队列通过测试之间的JMX,但仍收到这些重试:(...我搜索和调试......我完全不明白为什么这些重试正在添加保持向上,即使我敢肯定,净化出现正确。也许有人已经在会话缓存的地方......我不知道。任何人任何想法?

  2. 我发现我需要使用SingleConnectionFactory测试期间。 有了这个连接工厂的重试消失,但我真的不明白为什么。 为什么? 据我所知,它仅使用一个连接(从春季REF),并注意到它在某种程度上消除了消费者后,每发送动作,但我实在不明白这些重发生什么:?(...任何想法(这是很难调试由于多线程行为,难以找到它在网络上良好的信息),而且使用CachingConnectionFactory与1只有一个会话高速缓存的大小并没有解决重试的问题。

谢谢

Answer 1:

最好的选择将可能是使用的嵌入式代理和启动/停止它每次测试之间,确保deleteAllMessagesOnStartup设置为true和经纪人应该清除店前你,这将确保你有一个干净的石板为每个测试。 你也可能有在看看ActiveMQ的单元测试中获益,它是如何的经纪人可以在自动测试中使用的实例的良好来源。



Answer 2:

这不是修复一件容易的事情:删除测试的消息。 我试过很多thingssss,像上面提到:停止/启动代理和Spring的类使用DefaultMessageListenerContainer,我用它来消耗我的消息。 这一切都似乎工作,直到我转身我在使用DefaultMessageListenerContainer设置缓存级别消费者,使得消费者被缓存。 这需要使得redeliveryPolicy工作。 然而,这搞砸了一切,其中通过使用DefaultMessageListenerContainer以某种方式缓存,因为它似乎消息。

最后,我解决它通过简单的消耗测试后的所有邮件(只是等待第二和消费都OK),使得下一个测试就可以开始。



文章来源: Understanding JMS integration testing with Spring SingleConnectionFactory and CachingConnectionFactory