在测试期间清除嵌入的activemq数据

时间:2013-11-23 22:42:49

标签: java unit-testing junit activemq apache-camel

我正在我的项目中积极使用ActiveMQ。虽然生产使用独立ActiveMQ实例,但我的测试需要嵌入式ActiveMQ实例。执行特定测试方法后ActiveMQ在队列中保存未处理的消息。我想在每次测试后消灭ActiveMQ个实例。我尝试使用JMX连接到本地ActiveMQ实例并清除队列,但这是重量级解决方案。有谁能建议我更轻量级的东西?

3 个答案:

答案 0 :(得分:4)

在为单元测试定义代理URL时,只需关闭代理持久性

vm://localhost?broker.persistent=false

答案 1 :(得分:3)

ActiveMQ可以选择在启动时删除所有消息,如果使用XML方式配置ActiveMQ代理,则可以在< activemq>标签

<activemq:broker .... deleteAllMessagesOnStartup="true">

   ...
</activemq:broker>

另一种方法可能是每单元测试使用唯一的数据目录,这是我们在使用嵌入式ActiveMQ代理进行单元测试camel-jms组件时所做的。我们有一个帮助类,为我们设置ActiveMQ,具体取决于我们是否需要持久队列

https://git-wip-us.apache.org/repos/asf?p=camel.git;a=blob;f=components/camel-jms/src/test/java/org/apache/camel/component/jms/CamelJmsTestHelper.java;h=8c81f3e2bed738a75841988fd1239f54a100cd89;hb=HEAD

答案 2 :(得分:-1)

我相信你想要清除队列。有几种选择。

https://activemq.apache.org/how-do-i-purge-a-queue.html

来自链接

  

“您可以使用Web控制台查看队列,添加/删除队列,清除队列或删除/转发单个消息。另一个选项是使用JMX浏览队列并在QueueViewMBean上调用purge()方法。也可以通过BrokerViewMBean上的removeQueue(String)或removeTopic(String)方法删除队列。你也可以通过编程方式“

该链接详细描述了每个选项