我有一个 JMS 客户端,它可以在队列中查找消息,但也有一个拒绝。拒绝的人总是返回
false
以获得 enum.hasMoreElements()
。我只能得出结论,在消费者不活跃的情况下,在 if
/else
块中尝试此操作是错误的。如果我编写一个仅使用 QueueBrowser
(即没有 MessageConsumer
)的客户端,那么它会像广告中那样工作。我希望经验丰富的兽医能够帮助我理解。
// Consumer/Browser
TextMessage msgIn = session.createTextMessage();
boolean consumerBool = false;
if (consumerBool == true) {
System.out.println("Consumer ready to consume ...");
msgIn = (TextMessage)consumer.receive();
System.out.println("Consumer received " + msgIn.getText());
} else {
System.out.println("Starting QueueBrowser ... ");
cn.start();
QueueBrowser browser = session.createBrowser(queue);
Enumeration enumm = browser.getEnumeration();
boolean elementsBool = enumm.hasMoreElements();
Queue temp = browser.getQueue();
System.out.println("Browser using queue = " + temp);
System.out.println("enumm.hasMoreElements() return = " + elementsBool);
while(enumm.hasMoreElements()) {
msgIn = (TextMessage)enumm.nextElement();
System.out.println("Browsed msg [" + msgIn.getText() + "]");
}
browser.close();
}
cn.close();
session.close();
下面的队列是正确的,里面有消息,但是
hasMoreElements()
是false
。你可以看到我做了强制性的cn.start()
。我在创建 enum
和 browser
之前就开始了它。