De acuerdo con javadoc, si llamo a receive() en javax.jms.MessageConsumer, se bloqueará indefinidamente hasta que se produzca un mensaje o hasta que se cierre el consumidor del mensaje.javax.jms.MessageConsumer se cuelga al recibir cuando el consumidor cerró
Tengo un hilo en el que se está llamando a un receive(). Como parte del cierre del hilo, estoy llamando a close(), pero el consumidor todavía bloquea en receive() y, por lo tanto, el hilo no se apagará. La esencia de mi código es:
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);
}
}
En el depurador que pueda ver de cerca() se llama, pero el recibir todavía bloques. Si utilizo el método receive() con un tiempo de espera, se bloqueará hasta que expire el tiempo de espera.
Todo me parece bien, con suerte alguien me puede decir lo que estoy haciendo mal.
JMS es notoriamente específico para la implementación subyacente. Ayudaría si dijeras cuál estabas usando. – skaffman
Gracias por responder. Es IBM MQ 7.0.0.2 – DaveRlz
[receiveNoWait] (http://docs.oracle.com/javaee/1.4/api/javax/jms/MessageConsumer.html#receiveNoWait()) –