清除Java中的Artemis ActiveMQServer队列

时间:2019-04-23 15:45:10

标签: java activemq-artemis

在集成测试中,我有一个ActiveMQServerImpl的实例,在我的SetUp方法中,我想清除服务器中的所有队列。我似乎找不到任何可以做到这一点的方法。出于性能原因,我想避免为每个测试重新创建Artemis服务器Bean。我只是想念什么吗?

我都尝试过:

System.out.println(testBroker.locateQueue(new SimpleString(queueName)).deleteAllReferences()); 
System.out.println(testBroker.locateQueue(new SimpleString(queueName)).getMessageCount()); 

和:

((QueueControl)testBroker.getManagementService().getResource(ResourceNames.QUEUE + queueName)).removeMessages(""); 
((QueueControl)testBroker.getManagementService().getResource(ResourceNames.QUEUE + queueName)).countMessages(""); 

两者均未显示消息计数的变化,并且我继续看到消息通过了我的@JMSListener带注释的方法。

1 个答案:

答案 0 :(得分:3)

没有用于清除代理中 all 个队列的API调用。执行此操作的一种方法是从ActiveMQServerControl获取所有队列名称,查找队列,并对所有队列调用deleteAllReferences(),例如:

for (String queueName : server.getActiveMQServerControl().getQueueNames()) {
   Queue queue = server.locateQueue(SimpleString.toSimpleString(queueName));
   if (queue != null) {
      queue.deleteAllReferences();
   }
}

确保在执行此代码时停止所有客户端,否则不会删除“正在传递”的消息(即已发送给客户端但尚未被客户端确认的消息)。