gpt4 book ai didi

java - 浏览服务总线队列卡在 hasMoreElements() 中

转载 作者:行者123 更新时间:2023-12-01 23:12:57 24 4
gpt4 key购买 nike

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

谢谢,简

最佳答案

这里发生了一些事情:

1) Service Bus 目前不支持通过 AMQP 进行消息浏览。由于 session 是使用 AUTO_ACKNOWLEDGE 创建的,因此您从枚举获得的每条消息都会立即从队列中删除。

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

关于java - 浏览服务总线队列卡在 hasMoreElements() 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21606255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com