In base a javadoc, se si chiama receive() su un javax.jms.MessageConsumer, si blocca indefinitamente fino a quando non viene prodotto un messaggio o fino alla chiusura del consumer del messaggio.javax.jms.MessageConsumer si blocca quando viene chiuso il consumer
Ho una discussione in cui viene chiamato un receive(). Come parte dell'arresto del thread, sto chiamando close(), ma il consumer continua a bloccare in receive() e quindi il thread non si spegnerà. Il nocciolo del mio codice è:
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);
}
}
Nel debugger posso vedere close() essere chiamato, ma la ricezione ancora blocchi. Se utilizzo il metodo receive() con un timeout, verrà bloccato fino alla scadenza del timeout.
Tutto sembra giusto per me, si spera che qualcuno possa dirmi cosa sto facendo male.
JMS è notoriamente specifico dell'implementazione sottostante. Sarebbe utile se tu dicessi quale stavi usando. – skaffman
Grazie per la risposta. È IBM MQ 7.0.0.2 – DaveRlz
[receiveNoWait] (http://docs.oracle.com/javaee/1.4/api/javax/jms/MessageConsumer.html#receiveNoWait()) –