2014-02-06 27 views
0

我們有內部服務總線安裝。我可以使用QPID AMQP 1.0 0.24客戶端發佈和訂閱/讀取消息。然而,如果隊列瀏覽不起作用,那麼當hasMoreElements()隊列中沒有更多消息時,調用會無限期地掛起。堆棧跟蹤是:瀏覽服務總線隊列掛在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 =(連接工廠)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客戶端還是服務總線中的錯誤?

謝謝,揚

回答

3

有幾件事情會在這裏:

1)服務總線不會在這個時候支持郵件瀏覽了AMQP。由於會話是使用AUTO_ACKNOWLEDGE創建的,因此您從枚舉中獲得的每條消息都會立即從隊列中刪除。

2)我用QPid 0.25重現了hasMoreElements()中的掛起。看起來hasMoreElements()正在等待更多的消息到達隊列中,至少在一開始。如果我發送更多消息,循環將繼續,並且一些新到達的消息將被返回,但它會很快停止。我仍在調查以確定那裏發生了什麼。

+0

即使使用Session.CLIENT_ACKNOWLEDGE,也會從隊列中刪除消息。我認爲這種模式只有在使用connection.start()和receive()時纔有效果。未實現的功能列表:[使用Service with .NET with AMQP 1.0](http://msdn.microsoft.com/en-us/library/windowsazure/jj841075.aspx) –

+0

這是一個相關問題http:// osdir.com/ml/dev-qpid.apache.org/2013-09/msg00417.html? – Sentinel

+0

使用QPID 0.26 RC4進行檢查,仍然掛起。但詹姆斯表示目前不支持,所以它可能也是經紀人的問題。 –

相關問題