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

Java 在测试期间清除嵌入的activemq数据,java,unit-testing,junit,activemq,apache-camel,Java,Unit Testing,Junit,Activemq,Apache Camel,我在项目中积极使用ActiveMQ。虽然生产使用独立的ActiveMQ实例,但我的测试需要嵌入ActiveMQ实例。执行特定测试方法后,ActiveMQ将未处理的消息保存在队列中。我想在每次测试后清除ActiveMQ实例。我尝试使用JMX连接到本地ActiveMQ实例并清除队列,但这是一个很重的解决方案。有人能给我一些更轻量级的建议吗?ActiveMQ有一个选项,可以在启动时删除所有消息,如果使用XML方式配置ActiveMQ代理,可以在标记上设置它 <activemq:broker ..

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

ActiveMQ有一个选项,可以在启动时删除所有消息,如果使用XML方式配置ActiveMQ代理,可以在标记上设置它

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

   ...
</activemq:broker>

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

vm://localhost?broker.persistent=false

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

从链接

“您可以使用Web控制台查看队列、添加/删除队列、清除队列或删除/转发单个邮件。另一个选项是使用JMX浏览队列并在QueueViewMBean上调用purge()方法。您还可以通过removeQueue(字符串)或removeTopic(字符串)删除队列。”方法。您也可以通过编程方式执行此操作“


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

谢谢克劳斯,但我怀疑ActiveMQ是否会在测试之间重新启动。我将尝试您的另一种方法。您的单元测试应该在Before和After方法中启动和停止代理。这允许您在运行之间控制代理的状态。查看ActiveMQ单元测试以获得灵感。感谢您发布您的答案!请注意,您应该将答案的重要部分发布在此网站上,否则您的帖子可能会被删除。如果您愿意,您可以继续添加该链接,但仅作为“参考”。答案应该是独立的,不需要链接。