Filtrado del receptor de mensaje JMS por JMSCorrelationID
¿Cómo puedo crear una instancia de un escucha de cola JMS en java (JRE/JDK/J2EE 1.4) que solo recibe mensajes que coinciden con un JMSCorrelationID dado? Los mensajes que estoy buscando recoger se han publicado en una cola y no en un tema, aunque eso puede cambiar si es necesario.
Aquí está el código que estoy utilizando actualmente para poner el mensaje en la cola: configuración de la conexión/**
* publishResponseToQueue publishes Requests to the Queue.
*
* @param jmsQueueFactory -Name of the queue-connection-factory
* @param jmsQueue -The queue name for the request
* @param response -A response object that needs to be published
*
* @throws ServiceLocatorException -An exception if a request message
* could not be published to the Topic
*/
private void publishResponseToQueue(String jmsQueueFactory,
String jmsQueue,
Response response)
throws ServiceLocatorException {
if (logger.isInfoEnabled()) {
logger.info("Begin publishRequestToQueue: " +
jmsQueueFactory + "," + jmsQueue + "," + response);
}
logger.assertLog(jmsQueue != null && !jmsQueue.equals(""),
"jmsQueue cannot be null");
logger.assertLog(jmsQueueFactory != null && !jmsQueueFactory.equals(""),
"jmsQueueFactory cannot be null");
logger.assertLog(response != null, "Request cannot be null");
try {
Queue queue = (Queue)_context.lookup(jmsQueue);
QueueConnectionFactory factory = (QueueConnectionFactory)
_context.lookup(jmsQueueFactory);
QueueConnection connection = factory.createQueueConnection();
connection.start();
QueueSession session = connection.createQueueSession(false,
QueueSession.AUTO_ACKNOWLEDGE);
ObjectMessage objectMessage = session.createObjectMessage();
objectMessage.setJMSCorrelationID(response.getID());
objectMessage.setObject(response);
session.createSender(queue).send(objectMessage);
session.close();
connection.close();
} catch (Exception e) {
//XC3.2 Added/Modified BEGIN
logger.error("ServiceLocator.publishResponseToQueue - Could not publish the " +
"Response to the Queue - " + e.getMessage());
throw new ServiceLocatorException("ServiceLocator.publishResponseToQueue " +
"- Could not publish the " +
"Response to the Queue - " + e.getMessage());
//XC3.2 Added/Modified END
}
if (logger.isInfoEnabled()) {
logger.info("End publishResponseToQueue: " +
jmsQueueFactory + "," + jmsQueue + response);
}
} // end of publishResponseToQueue method
He estado leyendo sobre el mismo tema hace poco y tengo una pregunta de la siguiente manera: el receptor se siguen recibiendo esos mensajes que no contienen el identificador de correlación requerida y en silencio soltarlos w/o procesamiento, o serán las El proveedor JMS en sí no entrega tales mensajes al receptor, por lo que aún permanecen en la cola? Siento que este último es el enfoque correcto, pero quiero verificarlo. Gracias. – shrini1000
@ shrini1000 estás en lo correcto. – Trying