有一个 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);

10-08 06:52