根據javadoc,如果我調用javax.jms.MessageConsumer上的receive(),它將無限期地阻塞,直到生成消息或消息使用者關閉。javax.jms.MessageConsumer在消費者關閉時掛起接收
我有一個線程在調用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是臭名昭着的特定於底層實現。如果你說出你正在使用哪一個,這將有所幫助。 – skaffman
感謝您的回覆。它是IBM MQ 7.0.0.2 – DaveRlz
[receiveNoWait](http://docs.oracle.com/javaee/1.4/api/javax/jms/MessageConsumer.html#receiveNoWait()) –