我有一个安装了HornetQ的JBoss-6服务器以及一个单一队列:
<queue name="my.queue">
<entry name="/queue/test"/>
</queue>
有不同的消费者(在不同的机器上)连接到这个队列,但每次只有一个单一消费者处于活动状态。如果我关闭这个消费者,消息会立即被其他消费者中的一个处理。
由于我的消息需要耗费一定时间进行处理,因此我希望多个消费者同时处理它们独特的消息。
我记得在早期版本的JBoss中有类似的设置可以正常工作,但在Jboss-6中消息系统工作良好——除了上述问题。这个问题与Are multiple client consumers possible in 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();
还有消息监听器:
public class OlVoidListener implements MessageListener
{
public void onMessage(Message msg)
{
counter++;
logger.debug("Message ("+counter+") received");
try {Thread.sleep(15*1000);} catch (InterruptedException e) {}
}
}
<consumer-window-size>0</consumer-window-size>
,请参见:https://dev59.com/QlrUa4cB1Zd3GeqPhCZF - Thor