У меня есть сервер JBoss-6 с HornetQ и одна очередь:
<queue name="my.queue">
<entry name="/queue/test"/>
</queue>
В этой очереди подключаются разные потребители (на разных машинах), но одновременно активен только один потребитель. Если я отключу этого пользователя, сообщения будут немедленно обработаны одним из других пользователей.
Поскольку у моих сообщений есть некоторая трудоемкая обработка, я хочу, чтобы несколько пользовательских процессов обрабатывали свои уникальные сообщения одновременно.
Я помню аналогичную в ранних версиях JBoss, где эта настройка работала без проблем. Здесь, в Jboss-6, система обмена сообщениями работает хорошо - за исключением проблемы, описанной выше. Этот вопрос похож на Возможно ли использование нескольких клиентов-клиентов в hornetq?, но сценарий не похож на мой.
Обновление 1. Если я закрываю (STRG + C) одного потребителя, возникает короткий тайм-аут (пока сервер не узнает потерянного потребителя), пока следующий потребитель не получит сообщение.
Обновление 2: фрагмент кода
VoidListener ml = new VoidListener();
QueueConnectionFactory qcf = (QueueConnectionFactory)
ctx.lookup("ConnectionFactory");
QueueConnection conn = qcf.createQueueConnection();
Queue queue = (Queue) ctx.lookup(queueName);
QueueSession session = conn.createQueueSession(false,
QueueSession.AUTO_ACKNOWLEDGE);
QueueReceiver recv = session.createReceiver(queue,"");
recv.setMessageListener(ml);
conn.start();
И MessageListerner:
public class OlVoidListener implements MessageListener
{
public void onMessage(Message msg)
{
counter++;
logger.debug("Message ("+counter+") received");
try {Thread.sleep(15*1000);} catch (InterruptedException e) {}
}
}