2012-07-26 8 views
17

Ho provato a google questo, ma non ho avuto successo. Se sto usando AUTO_ACKNOWLEDGE, e ho un cliente consumatore scritto in Java, quando viene riconosciuto il messaggio? Sto usando un MessageListener che contiene un metodo onMessage. La conferma inviata al server prima del onMessage o dopo il onMessage è completa o in qualche altro punto? Grazie in anticipo per qualsiasi aiuto che chiunque sia in grado di fornire!JMS AUTO_ACKNOWLEDGE quando viene riconosciuto?

risposta

19

Controllare questo one.

Con la modalità AUTO_ACKNOWLEDGE il riconoscimento è sempre l'ultima cosa che si verifica implicitamente dopo il ritorno del gestore . Il cliente che riceve i messaggi può ottenere il controllo più dettagliato sulla consegna dei messaggi garantiti specificando la modalità CLIENT_ACKNOWLEDGE sulla sessione consumano.

L'uso del CLIENT_ACKNOWLEDGE consente all'applicazione di controllare se l'acquisizione viene inviato. Ad esempio, un'applicazione può riconoscere un messaggio - evitando così al provider JMS del suo dovere - ed eseguire ulteriori elaborazioni dei dati rappresentati dal messaggio. La chiave per questo è il metodo acknowledge() sull'oggetto Message, come mostrato nel Listato 1.

Il metodo acknowledge() informa il provider JMS che il messaggio è stato ricevuto correttamente dal consumatore. Questo metodo genera un'eccezione al client se si verifica un errore del provider durante il processo di riconoscimento. L'errore del provider comporta che il messaggio venga mantenuto dal server JMS per la riconsegna.

+6

Cosa succede se viene generata un'eccezione durante l'elaborazione di 'onMessage()'? Sarà il messaggio essere riconsegnata se il 'AUTO_ACKNOWLEDGE' è impostato? – Geek

+2

@Geek - Se viene generata un'eccezione in OnReceive o nel JMSListener poi il riconoscimento non viene inviato e verrà riconsegnata – GameSalutes

+0

Se la ricezione di messaggi in modo sincrono con AUTO_ACKNOWLEDGE, il messaggio viene riconosciuto quando si chiama il metodo consumer.receive – Wecherowski

5

CLIENT_ACKNOWLEDGE
Con questa modalità di riconoscimento, il cliente riconosce un messaggio consumato chiamando il metodo riconoscere il messaggio.

Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); 
... 
msg = (TextMessage) consumer.receive(); 
//acknowledge 
msg.acknowledge(); 

AUTO_ACKNOWLEDGE
Con questa modalità di riconoscimento, la sessione riconosce automaticamente il ricevimento di un cliente di un messaggio o quando la sessione è tornato con successo da una chiamata per ricevere o quando l'ascoltatore messaggio che la sessione è chiamato a processo il messaggio ritorna con successo.

Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); 

source
Best example