使用HornetQ清空JBOSS 7中的jms队列

时间:2013-10-08 18:22:04

标签: jboss7.x jmx hornetq

我正在使用jboss 7.1.1 final和HornetQ 2.2.13 final。

我配置了几个队列,其中一个是“完整”的消息,成千上万。我无法删除这些消息。

我试过用命令使用jboss cli删除它们 /子系统=消息/文件hornetq服务器=默认/ JMS队列=队列:删除的消息

它成功响应,但消息仍在那里......

我尝试使用带有jmx命令的JConsole删除它们。它以零号响应,计数消息仍然相同。

我尝试删除Jboss控制台内的队列并重新启动AS。在我再次配置队列后,消息仍然存在,因为它仍然存在。

唯一可行的方法是配置hornetq服务器以禁用standalone.xml内的持久性。

有人知道如何使用jconsole或jboss cli吗?

1 个答案:

答案 0 :(得分:11)

您所要做的就是调用方法:

来自jboss-cli:

/子系统=消息/文件hornetq服务器=默认/ JMS队列= testQueue:删除的消息

我刚尝试了你尝试过的确切版本,添加了大量的消息,包括分页......一切正常。

我将系统配置为页面,并使用它来创建几千条消息:

  HornetQConnectionFactory cf = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, new TransportConfiguration(NETTY_CONNECTOR_FACTORY));
  Connection conn = cf.createConnection("guest", "hello");
  Session sess = conn.createSession(true, Session.SESSION_TRANSACTED);
  javax.jms.Queue queue = sess.createQueue("testQueue");
  MessageProducer prod = sess.createProducer(queue);

  for (int i = 0 ; i < 50000; i++)
  {
     TextMessage msg = sess.createTextMessage("hello " + i);
     prod.send(msg);
     if (i % 500 == 0)
     {
        System.out.println("Sent " + i);
        System.out.println("commit");
        sess.commit();
     }
  }
  sess.commit();
  conn.close();

然后我尝试了删除方法,它起作用了:

/子系统=消息/文件hornetq服务器=默认/ JMS队列= testQueue:删除的消息

如果这不起作用,有两种可能性:

  • 我们更改了交付期间锁定在队列中的方式。也许你正在遇到一个固定的bug,你将不得不转向更新的版本。

  • 您在消费者中有交付的队列。如果消息在处于交付状态的消费者缓冲区中,我们无法删除它们。您必须删除使用者才能删除所有邮件。

我在这里添加这个答案,因为我做了很多研究试图复制你的问题,一切都像魅力一样。我需要更多信息来了解情况。

我认为最好的是用户论坛,我们可以进一步讨论它。 SOF将是简单的问题/答案。它不是调查错误或其他任何东西的地方。

https://community.jboss.org/en/hornetq?view=discussions