使用 JMS HornetQ 与持久消息进行 Arquillian 集成测试。一些测试使消息日志充满了未处理的消息,这些消息打破了其他期望没有数据的测试。
有没有办法告诉 JMS 在执行测试之前或之后清理其消息日志?
答案 0 :(得分: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);
答案 1 :(得分:2)
如果您正在重新启动服务器,则可以删除分页和数据文件夹(同时保留绑定)。