JMSCorrelationID

De Dos Ideas.
Saltar a: navegación, buscar

El JMSCorrelationID es un campo en los mensajes JMS que permite identificar un mensaje.

Identificando un mensaje de una cola

Hasta ahora, mandabamos un mensaje a una cola, la cual se iba llenando, y al pedirle un mensaje tomaba el primero (como en toda cola).

Ahora necesitamos que un mensaje enviado, vaya identificado de tal forma que se lo pueda localizar.

El Mensaje cuenta con la posibilidad de setearle diferentes cosas asociadas a JMS:

setJMSCorrelationID(String correlationID)
setJMSExpiration(long expiration)
setJMSMessageID(String id)
setJMSPriority(int priority)
etc....

A primera vista parece que para identificar un mensaje lo mejor seria setearle el MessageID, pero este ID aunque se lo seteamos, al hacerle el send() lo cambia y pone un numero raro. Por esto, una forma de identificar a nuestro mensaje, es seteandole el JMSCorrelationID antes de hacerle el send:

   // Creamos el mensaje
   TextMessage msg = qsession.createTextMessage();
   msg.setText("Gaz, quiero la tostada " + id);
   msg.setJMSCorrelationID(id);
   // Enviamos el mensaje
   QueueSender qsender = qsession.createSender(queue);
   qsender.send(msg);

A la hora de ir a recuperar nuestro mensaje, lo unico que cambia es la forma de construir el receiver:

   String selector = "JMSCorrelationID = '" + id + "'";
   QueueReceiver qreceiver = qsession.createReceiver(queue, selector);
   qcon.start();
   TextMessage msg = (TextMessage) qreceiver.receive();

Las reglas para hacer el selector pueden ser encontradas en la API de Message

En el caso de mandar un selector null o vacio, tomara la primera posicion de la cola como si no estuviese dicho selector.

Con los selectores se pueden hacer una gran combinacion de sentencias para utilizar estas colas de diferentes formas.

Ver también