简体   繁体   中英

How to set Message ID in Activemq jms Queue?

I have downloaded activemq version 5.8.0 and wrote the sample program for creating queues. I sent a sample message to a queue successfully.

After that I tried to set the message ID to the particular message. The message ID can be used to retrieve the specific message. I have tried to set the message ID using message.setJMSMessageID("1234"); .

 public static void messagestoQueueu(){

     // JMS messages are sent and received using a Session. We will
        // create here a non-transactional session object. If you want
        // to use transactions you should set the first parameter to 'true'
        Session session;
        try {
             // Getting JMS connection from the server and starting it
            ConnectionFactory connectionFactory =
                new ActiveMQConnectionFactory(url);
            Connection connection = connectionFactory.createConnection();
            connection.start();
            session = connection.createSession(false,
                Session.AUTO_ACKNOWLEDGE);

        // Destination represents here our queue 'TESTQUEUE' on the
        // JMS server. You don't have to do anything special on the
        // server to create it, it will be created automatically.
        Destination destination = session.createQueue("test");

        // MessageProducer is used for sending messages (as opposed
        // to MessageConsumer which is used for receiving them)
        MessageProducer producer = session.createProducer(destination);

        // We will send a small text message saying 'Hello' in Japanese
        //BytesMessage byteMessage = session.create;  


        TextMessage message = session.createTextMessage();
        message.setJMSType("sample");
        message.setJMSMessageID("1234");
        message.setText("sample");


        message.setJMSCorrelationID("choole");
        message.setJMSMessageID("choo01");
        message.setJMSReplyTo(destination);

        producer.send(queue, message);
        // Here we are sending the message!
        producer.send(message);
        System.out.println(message.getJMSMessageID()+" "+message.getJMSCorrelationID());
        //System.out.println("Sent message '" + message.getText() + "'");

        connection.close();
        producer.close();
        session.close();
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

But it's not working. After setting the Message ID when I print it using getJMSMessageID() it prints random values.

How to add a message ID to the queue message?

As per specs user cannot set JMSMessageID value. It is JMS provider specific.

When a message is sent, JMSMessageID is ignored. When the send method returns
it contains a provider-assigned value.

You can set parameters to each message:

message.setStringProperty("property_name",property_val);

That way you can pass parameters between the producer and consumer.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM