我有一个带HornetQ的JBoss-6服务器和一个队列:
<queue name="my.queue">
<entry name="/queue/test"/>
</queue>
Run Code Online (Sandbox Code Playgroud)
有连接到这个队列中一个不同的消费者(在不同的机器),但只有一个单一的消费者是活动的时间.如果我关闭此消费者,消息将立即由其他消费者处理.
由于我的消息有一些耗时的处理,我希望多个消费者同时处理它们的唯一消息.
我记得早期版本的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();
Run Code Online (Sandbox Code Playgroud)
和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) {}
}
}
Run Code Online (Sandbox Code Playgroud)