【问题标题】:Process the jms messages sequentially/concurrently?按顺序/同时处理 jms 消息?
【发布时间】:2014-05-18 08:16:00
【问题描述】:

我的 JMS 消费者白天在 JMS 队列上产生任意数量(比如 n)条消息。首先我在评估消息的同步处理

说在 23.0 时钟,现在我想消费所有消息。这是主要方法

以下是按顺序(非同时)执行的方法:-

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

【问题讨论】:

  • 您尝试过自己的建议吗?
  • @Simon 第一个我试过但关于第二个我不确定它是否正确?

标签: java jms activemq


【解决方案1】:

要按顺序处理 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,您只需为每个线程创建一个会话和消费者。

【讨论】:

  • @Ireeder 正如我在帖子中所说,“每个线程都创建自己的消费者”,而不是单个消费者。所以看起来我不是正确的道路?
  • 每个线程都应该创建自己的消费者,但它也应该为每个消费者创建一个单独的会话。
  • @Ireeder 我的第一个问题是我按顺序做的。在那种情况下,我可以使用相同的消费者,只需要多次调用接收。对吗?
  • 我错过了你问题的那一部分。我的答案已经更新了,但是是的,基本上只是按照你的预期多次调用接收。
  • @ireeder。凸轮您提供对此stackoverflow.com/questions/22890086/… 的见解。提前致谢。
猜你喜欢
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2019-03-02
  • 1970-01-01
  • 2015-02-17
  • 2012-07-12
相关资源
最近更新 更多