0

我们有本地服务总线安装。我可以使用 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"); 连接 = 连接工厂.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 客户端或服务总线中的错误吗?

谢谢,扬

4

1 回答 1

3

这里发生了几件事:

1) Service Bus 目前不支持通过 AMQP 进行消息浏览。因为会话是使用 AUTO_ACKNOWLEDGE 创建的,所以您从 Enumeration 获得的每条消息都会立即从队列中删除。

2) 我用 QPid 0.25 重现了 hasMoreElements() 中的挂起。似乎 hasMoreElements() 至少在开始时正在等待更多消息到达队列。如果我发送更多消息,循环将继续并返回一些新到达的消息,但它会很快停止。我仍在调查以确定那里发生了什么。

于 2014-02-08T01:12:03.810 回答