JMSMessageID
uniquely identifies each message sent by a provider. All JMSMessageID values
must start with the prefix 'ID:'.
JMSConsumer.java
Since
to achieve uniqueness across all the messages, message ID creation takes some
effort, and it also increases the message size. But JMSMessageID may not be
required in all the cases. In those cases, JMS Producers can hit providers,
they do not require message id.
How can a JMS
producer disable the message id?
javax.jms.MessageProducer
and javax.jms.JMSProducer interfaces provide setDisableMessageID method, which
allows the application to provide a hint to disable message ID.
Note
Even
though JMS producer given a hint to disable message id, provider may not
disable the message id. If the JMS provider
accepts this hint, these messages must have the message ID set to null; if the
provider ignores the hint, the message ID must be set to its normal unique
value.
JMSProducer.java
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."); 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 jmsMessageId = message.getJMSMessageID(); System.out.println("jmsMessageId : " + jmsMessageId); if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; System.out.println("Received message '" + textMessage.getText() + "'"); } connection.close(); } }
Run
JMSProducer.java followed by JMSConsumer.java.
Output
jmsMessageId : ID:INLN50911363A-55694-1524808729129-1:1:1:1:1 Received message 'Hello, this is my first message.'
As
you see the output, there is a unique id is assigned to this message.
Let’s
disable the message id.
Add
below statement in JMSProducer class and rerun JMSProducer Application.
producer.setDisableMessageID(true);
Re
run the application ‘JMSConsumer.java’.
I
got below output.
jmsMessageId
: ID:INLN50911363A-55754-1524808920803-1:1:1:1:1
Received
message 'Hello, this is my first message.'
As
you observe the above output, even though I give hint to disable the message
id, ActiveMQ is not ignoring my hint.
No comments:
Post a Comment