我有一个带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) 我已经使用HornetQ设置了一个jms服务器作为JMS提供程序(Queue).
我有一个应用程序作为生产者,另一个(不同的计算机)作为消费者.
我知道JMS规范并不保证交付顺序,但我正在寻找一种方法:完全按照发送的顺序接收消息,即使它是特定于提供者的.
有任何想法吗?