【发布时间】: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