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