5

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

我配置了几个队列,其中一个是“满”的消息,几千条。我无法删除消息。

我尝试使用 jboss cli 使用命令 /subsystem=messaging/hornetq-server=default/jms-queue=Queue:remove-messages 删除它们

它响应成功,但消息仍然存在......

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

我尝试删除 Jboss 控制台中的队列并重新启动 AS。在我再次配置队列后,消息仍然存在,导致其持久化。

它起作用的唯一方法是配置hornetq 服务器以禁用standalone.xml 中的持久性。

有人知道如何使用 jconsole 或 jboss cli 来做到这一点吗?

4

1 回答 1

13

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

来自 jboss-cli:

/subsystem=messaging/hornetq-server=default/jms-queue=testQueue:remove-messages

我刚刚通过添加大量消息(包括分页)尝试了您尝试过的确切版本。一切正常。

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

  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();

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

/subsystem=messaging/hornetq-server=default/jms-queue=testQueue:remove-messages

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

  • 我们更改了在交付期间锁定在队列中的方式。也许您遇到了一个已修复的错误,您将不得不迁移到更新的版本。

  • 您在消费者的交付中排队。如果消息处于传递状态的消费者缓冲区中,我们无法删除消息。您必须删除消费者才能删除所有消息。

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

我认为最好的是用户论坛,我们可以在其中进一步讨论。SOF 将进行简单的问题/答案。它不是调查错误或类似的地方。

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

于 2013-10-08T20:08:32.147 回答