【发布时间】:2019-04-24 03:21:11
【问题描述】:
我在集成测试中有一个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 注释方法。
【问题讨论】:
-
您是否在尝试清除队列之前停止您的客户端?
org.apache.activemq.artemis.core.server.Queue#getDeliveringCount()返回什么? -
getMessageCount() 返回的结果相同。所以我想我只需要在调用 deleteAllReferences() 之前停止 jms 客户端?
-
getMessageCount()包括正在传递的消息(这意味着它们已发送到客户端但尚未被客户端确认)。deleteAllReferences()或removeMessages()不会删除正在传递的消息。您应该停止所有客户端(例如断开他们的连接),以便将消息取消回队列,然后可以将其删除。
标签: java activemq-artemis