根据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);
}
}
Run Code Online (Sandbox Code Playgroud)
在调试器中,我可以看到正在调用close(),但接收仍然阻塞.如果我使用带有超时的receive()方法,它将一直阻塞,直到超时到期.
一切看起来都对我来说,希望有人可以告诉我我做错了什么.
我已经对问题进行了排序,我没有在任何地方进行connection.start().一旦我把它放入,MessageConsumer.receive()在我关闭它时停止了阻塞,一切都按照我的预期运行.
谢谢你的建议.
| 归档时间: |
|
| 查看次数: |
16094 次 |
| 最近记录: |