有一个 Arquillian 集成测试,使用 JMS HornetQ 和持久消息进行。某些测试使消息日志中充满未处理的消息,从而破坏了其他预期没有数据的测试。
有没有一种方法可以告诉 JMS 在执行测试之前或之后清除其消息传递日志?
最佳答案
这在JMS API本身中不存在,但是HornetQ QueueControl管理对象中有一个方法“removeMessages(filter)”。可以在用于队列的JMX Bean中找到此方法,但是我不知道如何在Arquillian中获得该方法。
幸运的是,您可以通过“hornetq.management”队列调用管理操作。参见http://docs.jboss.org/hornetq/2.2.5.Final/user-manual/en/html/management.html。实际上,以下应该起作用:
Queue managementQueue = HornetQJMSClient.createQueue("hornetq.management");
QueueRequestor requestor = new QueueRequestor(session, managementQueue);
Message m = session.createMessage();
JMSManagementHelper.putOperationInvocation(m,
"jms.queue.exampleQueue",
"removeMessages","*");
Message reply = requestor.request(m);
boolean success = JMSManagementHelper.hasOperationSucceeded(reply);