He intentado googlear esto, pero no he tenido éxito. Si estoy usando AUTO_ACKNOWLEDGE
, y tengo un cliente de consumo escrito en Java, ¿cuándo se reconoce el mensaje? Estoy usando un MessageListener
que contiene un método onMessage
. ¿El acuse de recibo se devuelve al servidor antes del onMessage
o después de que se haya completado el onMessage
o en algún otro punto? ¡Gracias de antemano por cualquier ayuda que alguien pueda proporcionar!JMS AUTO_ACKNOWLEDGE ¿cuándo se confirma?
Respuesta
Compruebe esto one.
Con el modo AUTO_ACKNOWLEDGE
, la confirmación es siempre lo último que ocurre implícitamente después de que el manejador onMessage()
regrese. El cliente que recibe los mensajes puede obtener un control más preciso sobre la entrega de mensajes garantizados al especificar el modo CLIENT_ACKNOWLEDGE
en la sesión de consumo.
El uso de CLIENT_ACKNOWLEDGE
permite que la aplicación controle cuando se envía el acuse de recibo. Por ejemplo, una aplicación puede acusar recibo de un mensaje -aliviando así al proveedor JMS de su deber- y realizar un procesamiento adicional de los datos representados por el mensaje. La clave para esto es el método acknowledge() en el objeto Message, como se muestra en el Listado 1.
El método acknowledge()
informa al proveedor de JMS que el mensaje ha sido recibido con éxito por el consumidor. Este método arroja una excepción al cliente si ocurre una falla del proveedor durante el proceso de reconocimiento. La falla del proveedor da como resultado que el mensaje sea retenido por el servidor JMS para su reentrega.
CLIENT_ACKNOWLEDGE
Con este modo de acuse de recibo, 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 confirmación, la sesión reconoce automáticamente la recepción de un cliente de un mensaje o bien cuando la sesión ha regresado con éxito de una llamada para recibir o cuando la escucha de mensajes de la sesión ha llamado a proceso el mensaje vuelve exitosamente.
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
- 1. ActiveMQ Sesión AUTO_ACKNOWLEDGE impacto propiedad
- 2. ¿Cómo simular la entrega de mensajes en AUTO_ACKNOWLEDGE JMS Session Scenario?
- 3. Spring + JPA @Transactional no confirma
- 4. GitHub - Lista confirma por autor
- 5. Github confirma y extrae solicitudes
- 6. ¿Cómo se confirma el código como un usuario diferente?
- 7. Git: duplicado se confirma después de rebase local, entonces tire
- 8. JMS rollback
- 9. confirma que no aparece en github
- 10. Largas sesiones de JMS. Mantener las conexiones JMS/sesiones JMS siempre abiertas ¿una mala práctica?
- 11. JMS vs Webservices
- 12. ActiveMQ JMS ping
- 13. Excepción JMS y ActiveMQ
- 14. Tamaño de mensaje JMS
- 15. Java JMS de mensajería
- 16. ¿Cuándo es la mensajería (por ejemplo, JMS) una alternativa para multihilo?
- 17. Cliente JMS genérico
- 18. JBoss JMS Remote Queue?
- 19. mensajes JMS por Node.js
- 20. Corredor liviano JMS
- 21. Procesamiento JMS efectivo
- 22. Implementación de mensajería JMS
- 23. JMS equivalente en .Net
- 24. JMS y JMX tutoriales?
- 25. ¿Cuándo se crea PropertyChangedEventManager y cuándo se adjunta?
- 26. ¿Cuándo elegir API JMS sobre API de socket UDP o viceversa?
- 27. ¿Cómo se maneja el orden de los mensajes en JMS?
- 28. ¿Cuándo se configura Log4Net?
- 29. ¿Cuándo se borra localStorage?
- 30. ¿Cuándo se activará ACTION_OUTSIDE?
¿Qué ocurre si se produce una excepción durante el procesamiento de 'onMessage()'? ¿Se volverá a entregar el mensaje si se establece 'AUTO_ACKNOWLEDGE'? – Geek
@Geek - Si se lanza una excepción enReceive o en el JMSListener, el acuse de recibo no se envía y se volverá a entregar – GameSalutes
Si se reciben mensajes de forma síncrona con AUTO_ACKNOWLEDGE, el mensaje se confirma al llamar al método consumer.receive – Wecherowski