我的JMS使用者在白天在JMS队列上生成任意数量(Say n)的消息。首先,我正在评估消息的同步处理
在23.0时钟说,现在我想要消耗所有消息。这是主要方法
以下是按顺序(不兼容)的方法:
我是否需要在单个消费者上调用consumer.receive()方法n次(直到返回consumer.receive()返回null)?
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost");
// Create a Connection
Connection connection = connectionFactory.createConnection();
connection.start();
// Create a Session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Create the destination (Topic or Queue)
Destination destination = session.createQueue("TEST.FOO");
// Create a MessageConsumer from the Session to the Topic or Queue
MessageConsumer consumer = session.createConsumer(destination);
// Wait for a message
Message message = consumer.receive();
如何同时执行: - 我想同时处理20条消息
我是否需要创建20个线程,其中每个线程创建自己的使用者并接收消息?
答案 0 :(得分:0)
要按顺序处理20条消息,并且您知道至少会收到20条消息,请将MessageConsumer.receive()
次呼叫置于循环中20次。请注意,如果队列中没有消息,则没有超时参数的MessageConsumer.receive()
将不返回null。它将阻塞,直到收到消息,或者直到调用close()
为止。如果您使用MessageConsumer.receive(longTimeoutValue)
,它将等待longTimeoutValue接收消息,并且如果当时没有收到消息则返回null。
对于并发消息处理,ActiveMQ文档提供了如何在此处使用多个使用者的示例:http://activemq.apache.org/hello-world.html,您可以根据需要对其进行修改。该示例为每个线程创建一个新连接,但根据http://activemq.apache.org/multiple-consumers-on-a-queue.html,您只需要为每个线程创建一个会话和使用者。