如何在执行测试之前/之后清理HornetQ消息日志?

Bor*_*vić 3 java jms hornetq java-ee-6 jboss7.x

有一个Arquillian集成测试使用JMS HornetQ和持久消息.一些测试使消息日志充满了未处理的消息,这些消息打破了其他期望没有数据的测试.

有没有办法告诉JMS在执行测试之前或之后清理其消息日志?

Gee*_*nte 6

这在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);
Run Code Online (Sandbox Code Playgroud)