javax.jms.MessageConsumer зависает при получении, когда потребитель закрыт

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

Мне все кажется правильным, надеюсь, кто-нибудь скажет мне, что я делаю не так.

8
задан skaffman 4 November 2011 в 11:22
поделиться