2013-06-27 15 views
10

Sono nuovo a JMS. Per quanto ho capito Consumers sono in grado di raccogliere messaggi da coda/argomento. Quindi, perché hai bisogno di un MessageListener perché Consumers saprà quando hanno raccolto i messaggi? Qual è l'uso pratico di tale MessageListener?Qual è la differenza tra MessageListener e Consumer in JMS?

Edit: Dal Javadoc of MessageListener:

oggetto A MessageListener viene utilizzato per ricevere in modo asincrono consegnato messaggi.

Ogni sessione deve assicurare che trasmetta messaggi in modo seriale al listener . Ciò significa che un listener assegnato a uno o più utenti della stessa sessione può assumere che il metodo onMessage non viene chiamato con il messaggio successivo fino a quando la sessione non ha completato l'ultima chiamata.

Così mi sono confuso tra l'uso dei termini in modo asincrono e serialmente insieme. In che modo questi due termini si riferiscono alla descrizione della funzionalità di MessageListener?

risposta

17

La differenza è che MessageConsumer viene utilizzato per ricevere i messaggi in modo sincrono:

MessageConsumer mc = s.createConsumer(queue); 
Message msg = mc.receive(); 

Per la consegna asincrona, siamo in grado di registrare un oggetto MessageListener con un messaggio del consumatore:

mc.setMessageListener(new MessageListener() { 
    public void onMessage(Message msg) { 
     ... 
    } 
}); 
+0

Vedi la modifica. – Geek

+0

@Evgeniy \t Nella modalità AUTO_ACKNOWLEDGEMENT (non transazionale) Se si verifica un errore durante l'esecuzione del metodo receive() [synchronous] o onMessage() [aysnc], il messaggio viene automaticamente riconsegnato? Link: http://stackoverflow.com/questions/18712399/auto-acknowledgement-modenon-transactional-receive-vs-onmessage –

9

dal docs:

Per sincrono ricezione, un client può richiedere il messaggio successivo da un consumatore messaggio utilizzando uno dei suoi metodi di ricezione.

Per asincrono consegna, un client può registrare un oggettoMessageListener con un consumatore messaggio.

+0

+1 Per il collegamento. – Santosh

2

Una delle maggiori differenze come da mia conoscenza non dichiarato in altre risposte è che MessageConsumer può fare uso di MessageSelectors e quindi ha la capacità di consumare messaggi a cui è interessato, dove come MessageListener ascolterà tutti i messaggi.

Dal J2EE esercitazione doc http://docs.oracle.com/javaee/5/tutorial/doc/bnceh.html

JMS Message selettori
Se l'applicazione di messaggistica ha bisogno di filtrare i messaggi che riceve, è possibile utilizzare un selettore di messaggi API JMS, che permette ad un messaggio consumatore di specificare i messaggi a cui è interessato. I selettori di messaggi assegnano il lavoro di filtraggio dei messaggi al provider JMS piuttosto che all'applicazione.

Problemi correlati