2013-10-08 3 views
3

Я использую финал jboss 7.1.1 final и HornetQ 2.2.13.Пустая очередь jms в JBOSS 7 с использованием HornetQ

У меня есть пара очередей, и одна из них «полна» сообщений, пару тысяч. Я не могу удалить сообщения.

Ive пытался удалить их с помощью JBoss командной строки с помощью команды /подсистема = сообщений/hornetq-сервер = по умолчанию/JMS-очереди = Queue: удалить-сообщения

он отвечает с успехом, но сообщения все еще там ...

Ive пытался удалить их с помощью JConsole с помощью команды jmx. Он отвечает нулевым номером, и сообщения счетчика все те же.

Ive попытался удалить очередь внутри консоли Jboss и перезапустить AS. После того, как я снова настрою очередь, сообщения все еще остаются причиной ее сохранения.

Единственный способ, с помощью которого он работал, - настроить сервер hornetq, чтобы отключить постоянство внутри standalone.xml.

Кто-нибудь знает, как это сделать, используя jconsole или jboss cli?

+0

почему вы живучесть настроены, если вы не хотите, чтобы сообщения сохраняются? – eis

+0

Я никогда не говорил, что я не хочу сохранять сообщения ... Я имел в виду, что отключив эту функцию, я смог удалить сообщения из очереди. –

+0

ах ... так, видимо, сообщения «в доставке». это отличается от того, что он находится в очереди. – eis

ответ

10

Все, что вам нужно сделать, это вызвать метод:

от JBoss-кли:

/подсистема = сообщений/hornetq-сервер = по умолчанию/JMS-очереди = testQueue: REMOVE-сообщений

Я только что попытался в точных версиях, которые вы пробовали, добавив большое количество сообщений, в том числе с пейджингом .. и все сработало нормально.

Я настроил свою систему на страницу, и использовать это, чтобы создать несколько тысяч сообщений:

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: удалить-сообщения

Если это не работает, есть две возможности:

  • Мы изменили, как блокировки хранятся в очереди во время доставки. Возможно, вы попали в исправленную ошибку, и вам придется перейти на более новую версию.

  • У вас есть очереди в доставке по потребителям. Мы не можем удалять сообщения, если они находятся в буфере пользователя в состоянии доставки. Вы должны удалить пользователей, чтобы удалить все сообщения.

Я добавляю этот ответ здесь, поскольку я провел много исследований, пытаясь воспроизвести вашу проблему, и все работает как шарм. Мне нужно больше информации о том, что происходит.

Я думаю, что лучшим будет форум пользователя, где мы сможем обсудить его дальше. SOF собирается на простые вопросы/ответ. Это не место для расследования ошибок или чего-то подобного.

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

+0

Сохранено ли сохранение на вашем тестировании? в любом случае ... это ответ, который я нашел для своей проблемы: https://community.jboss.org/thread/197030?start=0&tstart=0 –

+0

Да .. Устойчивость была включена. В основном я использую метод, предложенный Джакираном в его ответе. Вам просто нужно позвонить remove-messages, и он должен работать –

+0

Проверьте ответ Джастина Бертрама ниже ответа Джакирана. –

Смежные вопросы