Java 按顺序/并发地处理jms消息?

Java 按顺序/并发地处理jms消息?,java,jms,activemq,Java,Jms,Activemq,我的JMS消费者在一天中在JMS队列上生成任意数量的任意n条消息。首先,我评估消息的同步处理 比如说23点,现在我想消耗所有的消息。这里是主要的方法 下面是如何依次执行而不是同时执行:- 我是否需要调用consumer.receive方法n次,直到在单个consumer上返回consumer.receive返回null ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("

我的JMS消费者在一天中在JMS队列上生成任意数量的任意n条消息。首先,我评估消息的同步处理

比如说23点,现在我想消耗所有的消息。这里是主要的方法

下面是如何依次执行而不是同时执行:-

我是否需要调用consumer.receive方法n次,直到在单个consumer上返回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个线程,其中每个线程创建自己的使用者并接收消息?

要按顺序处理20条消息,并且您知道您将至少接收20条消息,请将MessageConsumer.receive调用放入循环20次。请注意,如果队列中没有消息,则不带超时参数的MessageConsumer.receive将不会返回null。它将阻塞,直到收到消息,或直到调用close。如果使用MessageConsumer.receivelongTimeoutValue,它将等待longTimeoutValue接收消息,如果此时未收到消息,则返回null


对于并发消息处理,ActiveMQ文档提供了如何在此处使用多个使用者的示例:,您可以根据自己的目的对其进行修改。示例为每个线程创建一个新连接,但根据,您只需要为每个线程创建会话和消费者。

您尝试过自己的建议吗?@Simon first一个我尝试过,但关于第二个,我不确定这是否是正确的方法?@Ireder正如我在帖子中所说,每个线程创建自己的消费者,而不是单个消费者。看来我的路径不对?每个线程都应该创建自己的使用者,但它也应该为每个使用者创建一个单独的会话。@Ireder我的第一个问题是,我在哪里按顺序执行的。在这种情况下,我可以使用相同的消费者,只需要呼叫接收多次。对吧?我错过了你问题的那部分。我的答案已经更新了,但是是的,基本上只需要像你期望的那样多次呼叫接收即可。@ireeder。你能提供这方面的见解吗。提前谢谢。