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

Leo*_*rto 4 jmx hornetq jboss7.x

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

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

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

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

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

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

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

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

Cle*_*nic 12

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

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

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

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

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

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

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

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

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

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

  • 您还可以尝试通过禁用客户端的消息缓冲来减少“传递中”的消息数量。这可以通过在连接工厂配置中设置“consumer-window-size”来完成。尽管这可能会影响消费性能。 (2认同)