Zgodnie z javadoc, jeśli wywołasz metodę receive() na javax.jms.MessageConsumer, będzie ona blokować się w nieskończoność, dopóki nie zostanie wygenerowany komunikat lub dopóki użytkownik wiadomości nie zostanie zamknięty.javax.jms.MessageConsumer zawiesza się na odbiór po zamknięciu konsumenta
Mam wątek, w którym wywoływana jest funkcja receive(). W ramach zamykania wątku wywołuję metodę close(), ale konsola nadal blokuje funkcję receive(), dlatego wątek nie zostanie zamknięty. Istotą mojego kodu jest:
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);
}
}
W debugerze widzę wywołanie metody close(), ale odbieranie bloków nadal. Jeśli użyję metody receive() z limitem czasu, będzie ona blokowana do momentu wygaśnięcia limitu czasu.
Wszystko wygląda dobrze dla mnie, mam nadzieję, że ktoś może mi powiedzieć, co robię źle.
JMS jest znany z podstawowej implementacji. Pomoże ci, jeśli powiesz, z którego używasz. – skaffman
Dzięki za odpowiedź. To IBM MQ 7.0.0.2 – DaveRlz
[receiveNoWait] (http://docs.oracle.com/javaee/1.4/api/javax/jms/MessageConsumer.html#receiveNoWait()) –