【发布时间】:2011-12-21 20:32:32
【问题描述】:
根据 javadoc,如果我在 javax.jms.MessageConsumer 上调用 receive(),它将无限期阻塞,直到生成消息或关闭消息使用者。
我有一个线程,在其中调用了一个 receive()。作为线程关闭的一部分,我调用了 close(),但消费者仍然阻塞在 receive() 中,因此线程不会关闭。我的代码要点是:
public String receiveMessage() {
...
...
System.out.println("About to receive")
TextMessage message = (TextMessage) consumer.receive();
System.out.println("No longer receiving")
...
...
}
public void stop() {
try {
if (consumer != null) {
consumer.close();
}
} catch (JMSException ex) {
throw new IllegalStateException(ex);
}
}
在调试器中,我可以看到 close() 被调用,但接收仍然阻塞。如果我使用带有超时的 receive() 方法,它将阻塞直到超时到期。
一切对我来说都是正确的,希望有人能告诉我我做错了什么。
【问题讨论】:
-
JMS 是众所周知的特定于底层实现。如果您说出您使用的是哪一个,将会有所帮助。
-
感谢您的回复。它是 IBM MQ 7.0.0.2