Согласно javadoc, если я вызываю 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 () с тайм-аутом, он будет заблокирован до истечения тайм-аута.
Мне все кажется правильным, надеюсь, кто-нибудь скажет мне, что я делаю не так.