Очистить очереди Artemis ActiveMQServer в Java - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть экземпляр ActiveMQServerImpl в моих интеграционных тестах и ​​в моем методе SetUp, я хочу очистить все очереди на сервере. Я не могу найти какие-либо методы, которые могут сделать это. Из соображений производительности я бы хотел избежать повторного создания серверного компонента Artemis для каждого теста. Я что-то пропустил?

Я пробовал оба:

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 Ответ

3 голосов
/ 23 апреля 2019

Нет вызова API для очистки всех очередей в посреднике. Один из способов сделать это состоит в том, чтобы получить все имена очередей из ActiveMQServerControl, просмотреть очереди и вызвать deleteAllReferences() для всех из них, например ::

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

Убедитесь, что все ваши клиенты остановлены при выполнении этого кода, в противном случае сообщения, которые находятся "в процессе доставки" (т.е. сообщения, которые были отправлены клиенту, но еще не были подтверждены клиентом), не будут удалены.

...