3

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

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

4

2 回答 2

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);
于 2012-09-20T11:39:25.873 回答
2

如果要重新启动服务器,则可以删除分页和数据文件夹(同时保留绑定)。

于 2012-09-21T15:11:18.973 回答