顺序/同时处理jms消息?

时间:2014-04-06 03:05:38

标签: java jms activemq

我的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个线程,其中每个线程创建自己的使用者并接收消息?

1 个答案:

答案 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,您只需要为每个线程创建一个会话和使用者。