JMSCorrelationID
is used to link one message with another. Mostly it is used to link a response
message with its related request message.
JMSCorrelationID
can hold one of the following:
a.
A
provider-specific message ID
b.
An
application-specific String
c.
A
provider-native byte[] value.
Applications
can use this header to link the messages. Application-specified values must not
start with the 'ID:' prefix; this is reserved for provider-generated message ID
values.
How to set the
correlation Id?
javax.jms.Message
interface provides below methods to set the correlation id.
void
setJMSCorrelationIDAsBytes(byte[] correlationID) throws JMSException;
void
setJMSCorrelationID(String correlationID) throws JMSException;
package com.sample.producer; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class JMSProducer { private static final String JMS_PROVIDER_URL = "tcp://127.0.0.1:5050"; private static final String QUEUE = "DEMO_QUEUE"; public static void main(String[] args) throws JMSException { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(JMS_PROVIDER_URL); Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue(QUEUE); MessageProducer producer = session.createProducer(destination); TextMessage message = session.createTextMessage("Hello, this is my first message."); message.setJMSCorrelationID("Message1_1524810163656"); producer.send(message); connection.close(); } }
JMSConsumer.java
package com.sample.consumer; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class JMSConsumer { private static final String JMS_PROVIDER_URL = "tcp://127.0.0.1:5050"; private static final String QUEUE = "DEMO_QUEUE"; public static void main(String args[]) throws JMSException { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(JMS_PROVIDER_URL); Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue(QUEUE); MessageConsumer consumer = session.createConsumer(destination); Message message = consumer.receive(); String jmsCorrelationId = message.getJMSCorrelationID(); byte[] jmsCorrelationIDAsBytes = message.getJMSCorrelationIDAsBytes(); System.out.println("jmsCorrelationId : " + jmsCorrelationId); System.out.print("jmsCorrelationIDAsBytes : "); printByteArray(jmsCorrelationIDAsBytes); if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; System.out.println("\nReceived message '" + textMessage.getText() + "'"); } connection.close(); } private static void printByteArray(byte[] arr) { for (byte b : arr) { System.out.print(b + ","); } } }
Run
JMSProducer.java followed by JMSConsumer.java.
Output
jmsCorrelationId : Message1_1524810163656 jmsCorrelationIDAsBytes : 77,101,115,115,97,103,101,49,95,49,53,50,52,56,49,48,49,54,51,54,53,54, Received message 'Hello, this is my first message.'
No comments:
Post a Comment