java - example - JMS AUTO_ACKNOWLEDGE ¿Cuándo se confirma?
jms school (2)
Por favor, compruebe este.
Con el modo AUTO_ACKNOWLEDGE
, el reconocimiento siempre es lo último que sucede de manera implícita después de que regresa el controlador onMessage()
. El cliente que recibe los mensajes puede obtener un control más CLIENT_ACKNOWLEDGE
sobre la entrega de los mensajes garantizados al especificar el modo CLIENT_ACKNOWLEDGE
en la sesión de consumo.
El uso de CLIENT_ACKNOWLEDGE
permite a la aplicación controlar cuándo se envía el reconocimiento. Por ejemplo, una aplicación puede acusar recibo de un mensaje, lo que libera al proveedor de JMS de su deber, y realizar un procesamiento adicional de los datos representados por el mensaje. La clave para esto es el método de reconocimiento () en el objeto Mensaje, como se muestra en el Listado 1.
El método de acknowledge()
informa al proveedor de JMS que el consumidor ha recibido el mensaje correctamente. Este método lanza una excepción al cliente si se produce un error del proveedor durante el proceso de confirmación. El error del proveedor hace que el servidor JMS retenga el mensaje para volver a enviarlo.
He tratado de google esto, pero no han tenido éxito. Si estoy usando AUTO_ACKNOWLEDGE
, y tengo un cliente cliente escrito en Java, ¿cuándo se confirma el mensaje? Estoy usando un MessageListener
que contiene un método onMessage
. ¿Se envía el acuse de recibo al servidor antes de que onMessage
o después de que onMessage
complete o en algún otro momento? ¡Gracias de antemano por cualquier ayuda que alguien pueda proporcionar!
CLIENT_ACKNOWLEDGE
Con este modo de reconocimiento, el cliente reconoce un mensaje consumido llamando al método de reconocimiento del mensaje.
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
...
msg = (TextMessage) consumer.receive();
//acknowledge
msg.acknowledge();
AUTO_ACKNOWLEDGE
Con este modo de reconocimiento, la sesión confirma automáticamente la recepción de un mensaje por parte del cliente cuando la sesión ha regresado exitosamente de una llamada a recibir o cuando el oyente del mensaje al que ha llamado la sesión para procesar el mensaje regresa exitosamente.
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);