Quale sarebbe un buon modo per disabilitare temporaneamente un listener di messaggi? Il problema che voglio risolvere è:Come disabilitare temporaneamente un listener di messaggi
- messaggio A JMS viene ricevuto da un messaggio ascoltatore
- ottengo un errore quando si cerca di elaborare il messaggio.
- Attendo che il sistema si riattivi per poter elaborare il messaggio.
- Fino a quando il mio sistema non è pronto, non voglio altri messaggi, quindi ...
- ... Voglio disabilitare il listener dei messaggi.
- Il sistema è di nuovo pronto per l'elaborazione.
- Il messaggio non riuscito viene elaborato e il messaggio JMS viene riconosciuto.
- Abilita nuovamente il listener dei messaggi.
In questo momento, sto utilizzando Sun App Server. Ho disabilitato il listener dei messaggi impostandolo su null nel MessageConsumer e abilitato di nuovo usando setMessageListener (myOldMessageListener), ma dopo non ho più ricevuto alcun messaggio.
Oh, era davvero così semplice. Mi aspettavo più thread per chiamare il metodo onMessage. Grazie mille! – davidi
Le connessioni sono filettate. Le sessioni in corso (sessioni, consumatori, produttori) non sono thread-safe. Il tuo codice deve evitare l'accesso multithread. Per far ciò, JMS non ha potuto interconnettere le chiamate listener su un solo consumatore. –
Ho appena notato che la specifica JMS specifica esplicitamente questo comportamento di consegna seriale. È la sezione 4.4.16 della specifica JMS 1.0.2. In passato ho pensato che fosse solo implicito dalle regole di threading. –