我们有内部服务总线安装。我可以使用QPID AMQP 1.0 0.24客户端发布和订阅/阅读消息。但是,队列浏览操作工作时,当队列中没有更多消息时,对hasMoreElements()的调用将无限期挂起。堆栈跟踪是:
Thread [main] (Suspended)
waiting for: ConnectionEndpoint (id=19)
Object.wait(long) line: not available [native method]
ConnectionEndpoint(Object).wait() line: 503
Receiver.drainWait() line: 533
QueueBrowserImpl$MessageEnumeration.hasMoreElements() line: 154
Qpid.testBrowseTopic(Connection, Context) line: 209
Qpid.runTest(Qpid$Options) line: 93
Qpid.main(String[]) line: 63
代码:
ConnectionFactory connectionFactory =(ConnectionFactory)context.lookup(“MS_SERVICE_BUS”); connection = connectionFactory.createConnection();
session = connection.createSession(false/*transacted*/, Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) context.lookup("MY_QUEUE");
browser = session.createBrowser(queue);
Enumeration<Message> msgs = browser.getEnumeration();
while (msgs.hasMoreElements()) {// hangs when there are no more messages
Message message = msgs.nextElement();
//printMessage(message);
}
QPID 0.22的行为相同。这是QPID客户端或服务总线中的错误吗?
谢谢,Jan
答案 0 :(得分:3)
这里有几件事:
1)Service Bus目前不支持通过AMQP进行消息浏览。因为会话是使用AUTO_ACKNOWLEDGE创建的,所以从枚举中获得的每条消息都会立即从队列中删除。
2)我用QPid 0.25复制了hasMoreElements()中的挂起。似乎hasMoreElements()正在等待更多消息到达队列,至少在开始时是这样。如果我发送更多消息,循环将继续,并且将返回一些新到达的消息,但它会相当快地停止。我仍在调查,以确定那里发生了什么。