清除 Java 中的 Artemis ActiveMQServer 队列
Purge Artemis ActiveMQServer queues in Java
我在我的集成测试中有一个 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
注释方法。
没有 API 调用来清除代理中的 所有 队列。您执行此操作的一种方法是从 ActiveMQServerControl
中获取所有队列名称,查找队列,并对所有队列调用 deleteAllReferences()
,例如:
for (String queueName : server.getActiveMQServerControl().getQueueNames()) {
Queue queue = server.locateQueue(SimpleString.toSimpleString(queueName));
if (queue != null) {
queue.deleteAllReferences();
}
}
确保在执行此代码时停止所有客户端,否则 "in delivery" 的消息(即已发送到客户端但尚未被客户端确认的消息)将不会被删除.
我在我的集成测试中有一个 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
注释方法。
没有 API 调用来清除代理中的 所有 队列。您执行此操作的一种方法是从 ActiveMQServerControl
中获取所有队列名称,查找队列,并对所有队列调用 deleteAllReferences()
,例如:
for (String queueName : server.getActiveMQServerControl().getQueueNames()) {
Queue queue = server.locateQueue(SimpleString.toSimpleString(queueName));
if (queue != null) {
queue.deleteAllReferences();
}
}
确保在执行此代码时停止所有客户端,否则 "in delivery" 的消息(即已发送到客户端但尚未被客户端确认的消息)将不会被删除.