【问题标题】:JMS queue message read errorJMS 队列消息读取错误
【发布时间】:2014-04-30 17:59:35
【问题描述】:

我正在使用 jms 队列,使用 jms 队列正确创建连接,但是当开始从 JMS 队列读取消息时,第一次没有读取任何消息,但在第二次尝试(循环第二次迭代中)时将检索到消息。 示例:在 i=1 上,如下代码所示 if(message instanceof TextMessage) 返回 false,但在 i=2 上返回 ture,我们能够读取消息。

for (int i = 1; i <= 6; i++) {
            message = (TextMessage) consumer.receive(100);
            if (message instanceof TextMessage) {
                messageProcessed++;
                String msgValue = (String) message.getText();
                System.out.println(msgValue);
                XMLDomFromString(msgValue);
            }
        }

【问题讨论】:

  • 听起来很合理,您有 100 毫秒的超时时间,在某些不幸的情况下,这可能比到代理的往返时间要短。
  • 在将超时时间增加到 1000 毫秒后,它的工作正常。比如 :message = (TextMessage) consumer.receive(1000);
  • 嗯,你需要检查一下.receive()是否返回NULL,表示超时。 1 秒内没有收到消息的原因可能有上千种,您应该决定在这种情况下该怎么做。
  • 在“for”循环中是否有理由迭代 7 次?如果您的应用程序设计允许,您可能希望使用 consumer.receive() 来等待消息可用。
  • 迭代 7 仅用于理解目的,并且您的架构不允许消费者无限等待。我们正在使用循环进行批处理.. for (int i = 1; i

标签: jms


【解决方案1】:

请增加等待时间,因为有一段时间由于网络延迟您无法阅读消息,例如: message = (TextMessage) consumer.receive(1000); 将等待时间从 100 增加到 1000,现在问题解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多