0

オンプレミスの Service Bus インストールがあります。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 クライアントまたは Service Bus のバグですか?

ありがとう、ジャン

4

1 に答える 1

3

ここではいくつかのことが行われています:

1) Service Bus は、現時点では AMQP 経由のメッセージ ブラウズをサポートしていません。セッションは AUTO_ACKNOWLEDGE で作成されたため、列挙から取得したすべてのメッセージはすぐにキューから削除されます。

2) QPid 0.25 で hasMoreElements() のハングを再現しました。hasMoreElements() は、少なくとも最初は、さらに多くのメッセージがキューに到着するのを待っているようです。さらにメッセージを送信すると、ループが続き、新しく到着したメッセージの一部が返されますが、すぐに停止します。そこに何が起こっているのかを特定するために、私はまだ調査中です。

于 2014-02-08T01:12:03.810 に答える