You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by henry zhu <ch...@163.com> on 2016/07/18 10:10:31 UTC

The QPID-JMS 0.9 didn't suppor the feature of setting custom message ID

Hello, 

Today, I tried to use the javax.jms.TextMessage.setJMSMessageID(uuid) to set
a custom UUID by the qpid-jms 0.9 jar to publish the AMQP 1.0 message.
Unfortuately, the QPID-JMS 0.9 didn't suppor the feature of setting custom
message ID.  For more detailed information, please refer to the below source
code.
Is there anyone help me? Much appericated in advanced.
/*
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 */
package org.apache.qpid.jms.example.success.activemq;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.UUID;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.apache.qpid.jms.JmsConnection;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.apache.qpid.jms.JmsMessageProducer;
import org.apache.qpid.jms.message.JmsMessageIDBuilder;

//import org.apache.qpid.jms.example.success.Sender;

public class Sender {
	private static final String USER = "user";
	private static final String PASSWORD = "password";
	private static final int DEFAULT_COUNT = 1;
	private static final int DELIVERY_MODE = DeliveryMode.NON_PERSISTENT;

	private Context getContext() { 
		InitialContext context = null;
		try {
			InputStream resourceAsStream =
this.getClass().getResourceAsStream("hello.properties");
			Properties properties = new Properties();
			properties.load(resourceAsStream);
			context = new InitialContext(properties);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return context;

	}

	public void publish(int count) {
		try {
			// The configuration for the Qpid InitialContextFactory has been
			// supplied in
			// a jndi.properties file in the classpath, which results in it
			// being picked
			// up automatically by the InitialContext constructor.
			Context context = this.getContext();

			JmsConnectionFactory factory = (JmsConnectionFactory)
context.lookup("myFactoryLookup");
			JmsMessageIDBuilder
messageIDBuilder=JmsMessageIDBuilder.BUILTIN.DEFAULT.createBuilder();
			factory.setMessageIDBuilder(messageIDBuilder);
			Destination queue = (Destination) context.lookup("myQueueLookup");

			JmsConnection connection = (JmsConnection)factory.createConnection(USER,
PASSWORD);
			
	
			connection.setExceptionListener(new MyExceptionListener());
			connection.start();

			Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);

			//MessageProducer messageProducer = session.createProducer(queue);
			JmsMessageProducer messageProducer =
(JmsMessageProducer)session.createProducer(queue);
			long start = System.currentTimeMillis();
			for (int i = 1; i <= count; i++) {
				TextMessage message = session.createTextMessage("Text!");
			    String uuid=UUID.randomUUID().toString();
			    System.out.println("UUID:"+uuid);
			    messageProducer.setDisableMessageID(false);
				message.setJMSMessageID(uuid);
				messageProducer.send(message, DELIVERY_MODE, Message.DEFAULT_PRIORITY,
Message.DEFAULT_TIME_TO_LIVE);

				if (i % 100 == 0) {
					System.out.println("Sent message " + i);
				}
			}

			long finish = System.currentTimeMillis();
			long taken = finish - start;
			System.out.println("Sent " + count + " messages in " + taken + "ms");

			connection.close();
		} catch (Exception exp) {
			System.out.println("Caught exception, exiting.");
			exp.printStackTrace(System.out);
			System.exit(1);
		}
	}

	public static void main(String[] args) throws Exception {
		int count = DEFAULT_COUNT;
		if (args.length == 0) {
			System.out.println("Sending up to " + count + " messages.");
			System.out
					.println("Specify a message count as the program argument if you wish
to send a different amount.");
		} else {
			count = Integer.parseInt(args[0]);
			System.out.println("Sending up to " + count + " messages.");
		}
		Sender sender=new Sender();
		sender.publish(count);

	}

	private static class MyExceptionListener implements ExceptionListener {
		@Override
		public void onException(JMSException exception) {
			System.out.println("Connection ExceptionListener fired, exiting.");
			exception.printStackTrace(System.out);
			System.exit(1);
		}
	}
}



--
View this message in context: http://qpid.2158936.n2.nabble.com/The-QPID-JMS-0-9-didn-t-suppor-the-feature-of-setting-custom-message-ID-tp7647810.html
Sent from the Apache Qpid developers mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org


Re: The QPID-JMS 0.9 didn't suppor the feature of setting custom message ID

Posted by Robbie Gemmell <ro...@gmail.com>.
Just to add to Tim's answer...

If you are going to use the related config you might be better to
upgrade to 0.10.0 as that config has been updated a bit, and while the
old option still works for now it will be removed at a future date.

For the latest details, see
http://qpid.apache.org/releases/qpid-jms-0.10.0/docs/index.html#jms-configuration-options,
specifically in this case "jms.messageIDPolicy.messageIDType".

The users mailing list would also be better for such questions in future.

Robbie

On 18 July 2016 at 14:13, Timothy Bish <ta...@gmail.com> wrote:
> On 07/18/2016 06:10 AM, henry zhu wrote:
>>
>> Hello,
>>
>> Today, I tried to use the javax.jms.TextMessage.setJMSMessageID(uuid) to
>> set
>> a custom UUID by the qpid-jms 0.9 jar to publish the AMQP 1.0 message.
>> Unfortuately, the QPID-JMS 0.9 didn't suppor the feature of setting custom
>> message ID.  For more detailed information, please refer to the below
>> source
>> code.
>
>
> As per the JMS specification you cannot set a Message ID via the
> setJMSMessageID, the ID is supplied by the JMS provider on send.  We do
> allow some control over the type of Message ID that is provided in v0.9.0 of
> Qpid JMS which you can learn about by reading the configuration
> documentation here:
> http://qpid.apache.org/releases/qpid-jms-0.9.0/docs/index.html
>
>
>> Is there anyone help me? Much appericated in advanced.
>> /*
>>   *
>>   * Licensed to the Apache Software Foundation (ASF) under one
>>   * or more contributor license agreements.  See the NOTICE file
>>   * distributed with this work for additional information
>>   * regarding copyright ownership.  The ASF licenses this file
>>   * to you under the Apache License, Version 2.0 (the
>>   * "License"); you may not use this file except in compliance
>>   * with the License.  You may obtain a copy of the License at
>>   *
>>   *   http://www.apache.org/licenses/LICENSE-2.0
>>   *
>>   * Unless required by applicable law or agreed to in writing,
>>   * software distributed under the License is distributed on an
>>   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>   * KIND, either express or implied.  See the License for the
>>   * specific language governing permissions and limitations
>>   * under the License.
>>   *
>>   */
>> package org.apache.qpid.jms.example.success.activemq;
>>
>> import java.io.IOException;
>> import java.io.InputStream;
>> import java.util.Properties;
>> import java.util.UUID;
>>
>> import javax.jms.Connection;
>> import javax.jms.ConnectionFactory;
>> import javax.jms.DeliveryMode;
>> import javax.jms.Destination;
>> import javax.jms.ExceptionListener;
>> import javax.jms.JMSException;
>> import javax.jms.Message;
>> import javax.jms.MessageProducer;
>> import javax.jms.Session;
>> import javax.jms.TextMessage;
>> import javax.naming.Context;
>> import javax.naming.InitialContext;
>> import javax.naming.NamingException;
>>
>> import org.apache.qpid.jms.JmsConnection;
>> import org.apache.qpid.jms.JmsConnectionFactory;
>> import org.apache.qpid.jms.JmsMessageProducer;
>> import org.apache.qpid.jms.message.JmsMessageIDBuilder;
>>
>> //import org.apache.qpid.jms.example.success.Sender;
>>
>> public class Sender {
>>         private static final String USER = "user";
>>         private static final String PASSWORD = "password";
>>         private static final int DEFAULT_COUNT = 1;
>>         private static final int DELIVERY_MODE =
>> DeliveryMode.NON_PERSISTENT;
>>
>>         private Context getContext() {
>>                 InitialContext context = null;
>>                 try {
>>                         InputStream resourceAsStream =
>> this.getClass().getResourceAsStream("hello.properties");
>>                         Properties properties = new Properties();
>>                         properties.load(resourceAsStream);
>>                         context = new InitialContext(properties);
>>                 } catch (IOException e) {
>>                         // TODO Auto-generated catch block
>>                         e.printStackTrace();
>>                 } catch (NamingException e) {
>>                         // TODO Auto-generated catch block
>>                         e.printStackTrace();
>>                 }
>>                 return context;
>>
>>         }
>>
>>         public void publish(int count) {
>>                 try {
>>                         // The configuration for the Qpid
>> InitialContextFactory has been
>>                         // supplied in
>>                         // a jndi.properties file in the classpath, which
>> results in it
>>                         // being picked
>>                         // up automatically by the InitialContext
>> constructor.
>>                         Context context = this.getContext();
>>
>>                         JmsConnectionFactory factory =
>> (JmsConnectionFactory)
>> context.lookup("myFactoryLookup");
>>                         JmsMessageIDBuilder
>> messageIDBuilder=JmsMessageIDBuilder.BUILTIN.DEFAULT.createBuilder();
>>                         factory.setMessageIDBuilder(messageIDBuilder);
>>                         Destination queue = (Destination)
>> context.lookup("myQueueLookup");
>>
>>                         JmsConnection connection =
>> (JmsConnection)factory.createConnection(USER,
>> PASSWORD);
>>
>>
>>                         connection.setExceptionListener(new
>> MyExceptionListener());
>>                         connection.start();
>>
>>                         Session session = connection.createSession(false,
>> Session.AUTO_ACKNOWLEDGE);
>>
>>                         //MessageProducer messageProducer =
>> session.createProducer(queue);
>>                         JmsMessageProducer messageProducer =
>> (JmsMessageProducer)session.createProducer(queue);
>>                         long start = System.currentTimeMillis();
>>                         for (int i = 1; i <= count; i++) {
>>                                 TextMessage message =
>> session.createTextMessage("Text!");
>>                             String uuid=UUID.randomUUID().toString();
>>                             System.out.println("UUID:"+uuid);
>>                             messageProducer.setDisableMessageID(false);
>>                                 message.setJMSMessageID(uuid);
>>                                 messageProducer.send(message,
>> DELIVERY_MODE, Message.DEFAULT_PRIORITY,
>> Message.DEFAULT_TIME_TO_LIVE);
>>
>>                                 if (i % 100 == 0) {
>>                                         System.out.println("Sent message "
>> + i);
>>                                 }
>>                         }
>>
>>                         long finish = System.currentTimeMillis();
>>                         long taken = finish - start;
>>                         System.out.println("Sent " + count + " messages in
>> " + taken + "ms");
>>
>>                         connection.close();
>>                 } catch (Exception exp) {
>>                         System.out.println("Caught exception, exiting.");
>>                         exp.printStackTrace(System.out);
>>                         System.exit(1);
>>                 }
>>         }
>>
>>         public static void main(String[] args) throws Exception {
>>                 int count = DEFAULT_COUNT;
>>                 if (args.length == 0) {
>>                         System.out.println("Sending up to " + count + "
>> messages.");
>>                         System.out
>>                                         .println("Specify a message count
>> as the program argument if you wish
>> to send a different amount.");
>>                 } else {
>>                         count = Integer.parseInt(args[0]);
>>                         System.out.println("Sending up to " + count + "
>> messages.");
>>                 }
>>                 Sender sender=new Sender();
>>                 sender.publish(count);
>>
>>         }
>>
>>         private static class MyExceptionListener implements
>> ExceptionListener {
>>                 @Override
>>                 public void onException(JMSException exception) {
>>                         System.out.println("Connection ExceptionListener
>> fired, exiting.");
>>                         exception.printStackTrace(System.out);
>>                         System.exit(1);
>>                 }
>>         }
>> }
>>
>>
>>
>> --
>> View this message in context:
>> http://qpid.2158936.n2.nabble.com/The-QPID-JMS-0-9-didn-t-suppor-the-feature-of-setting-custom-message-ID-tp7647810.html
>> Sent from the Apache Qpid developers mailing list archive at Nabble.com.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
>> For additional commands, e-mail: dev-help@qpid.apache.org
>>
>>
>
>
> --
> Tim Bish
> twitter: @tabish121
> blog: http://timbish.blogspot.com/
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
> For additional commands, e-mail: dev-help@qpid.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org


Re: The QPID-JMS 0.9 didn't suppor the feature of setting custom message ID

Posted by Timothy Bish <ta...@gmail.com>.
On 07/18/2016 06:10 AM, henry zhu wrote:
> Hello,
>
> Today, I tried to use the javax.jms.TextMessage.setJMSMessageID(uuid) to set
> a custom UUID by the qpid-jms 0.9 jar to publish the AMQP 1.0 message.
> Unfortuately, the QPID-JMS 0.9 didn't suppor the feature of setting custom
> message ID.  For more detailed information, please refer to the below source
> code.

As per the JMS specification you cannot set a Message ID via the 
setJMSMessageID, the ID is supplied by the JMS provider on send.  We do 
allow some control over the type of Message ID that is provided in 
v0.9.0 of Qpid JMS which you can learn about by reading the 
configuration documentation here: 
http://qpid.apache.org/releases/qpid-jms-0.9.0/docs/index.html

> Is there anyone help me? Much appericated in advanced.
> /*
>   *
>   * Licensed to the Apache Software Foundation (ASF) under one
>   * or more contributor license agreements.  See the NOTICE file
>   * distributed with this work for additional information
>   * regarding copyright ownership.  The ASF licenses this file
>   * to you under the Apache License, Version 2.0 (the
>   * "License"); you may not use this file except in compliance
>   * with the License.  You may obtain a copy of the License at
>   *
>   *   http://www.apache.org/licenses/LICENSE-2.0
>   *
>   * Unless required by applicable law or agreed to in writing,
>   * software distributed under the License is distributed on an
>   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>   * KIND, either express or implied.  See the License for the
>   * specific language governing permissions and limitations
>   * under the License.
>   *
>   */
> package org.apache.qpid.jms.example.success.activemq;
>
> import java.io.IOException;
> import java.io.InputStream;
> import java.util.Properties;
> import java.util.UUID;
>
> import javax.jms.Connection;
> import javax.jms.ConnectionFactory;
> import javax.jms.DeliveryMode;
> import javax.jms.Destination;
> import javax.jms.ExceptionListener;
> import javax.jms.JMSException;
> import javax.jms.Message;
> import javax.jms.MessageProducer;
> import javax.jms.Session;
> import javax.jms.TextMessage;
> import javax.naming.Context;
> import javax.naming.InitialContext;
> import javax.naming.NamingException;
>
> import org.apache.qpid.jms.JmsConnection;
> import org.apache.qpid.jms.JmsConnectionFactory;
> import org.apache.qpid.jms.JmsMessageProducer;
> import org.apache.qpid.jms.message.JmsMessageIDBuilder;
>
> //import org.apache.qpid.jms.example.success.Sender;
>
> public class Sender {
> 	private static final String USER = "user";
> 	private static final String PASSWORD = "password";
> 	private static final int DEFAULT_COUNT = 1;
> 	private static final int DELIVERY_MODE = DeliveryMode.NON_PERSISTENT;
>
> 	private Context getContext() {
> 		InitialContext context = null;
> 		try {
> 			InputStream resourceAsStream =
> this.getClass().getResourceAsStream("hello.properties");
> 			Properties properties = new Properties();
> 			properties.load(resourceAsStream);
> 			context = new InitialContext(properties);
> 		} catch (IOException e) {
> 			// TODO Auto-generated catch block
> 			e.printStackTrace();
> 		} catch (NamingException e) {
> 			// TODO Auto-generated catch block
> 			e.printStackTrace();
> 		}
> 		return context;
>
> 	}
>
> 	public void publish(int count) {
> 		try {
> 			// The configuration for the Qpid InitialContextFactory has been
> 			// supplied in
> 			// a jndi.properties file in the classpath, which results in it
> 			// being picked
> 			// up automatically by the InitialContext constructor.
> 			Context context = this.getContext();
>
> 			JmsConnectionFactory factory = (JmsConnectionFactory)
> context.lookup("myFactoryLookup");
> 			JmsMessageIDBuilder
> messageIDBuilder=JmsMessageIDBuilder.BUILTIN.DEFAULT.createBuilder();
> 			factory.setMessageIDBuilder(messageIDBuilder);
> 			Destination queue = (Destination) context.lookup("myQueueLookup");
>
> 			JmsConnection connection = (JmsConnection)factory.createConnection(USER,
> PASSWORD);
> 			
> 	
> 			connection.setExceptionListener(new MyExceptionListener());
> 			connection.start();
>
> 			Session session = connection.createSession(false,
> Session.AUTO_ACKNOWLEDGE);
>
> 			//MessageProducer messageProducer = session.createProducer(queue);
> 			JmsMessageProducer messageProducer =
> (JmsMessageProducer)session.createProducer(queue);
> 			long start = System.currentTimeMillis();
> 			for (int i = 1; i <= count; i++) {
> 				TextMessage message = session.createTextMessage("Text!");
> 			    String uuid=UUID.randomUUID().toString();
> 			    System.out.println("UUID:"+uuid);
> 			    messageProducer.setDisableMessageID(false);
> 				message.setJMSMessageID(uuid);
> 				messageProducer.send(message, DELIVERY_MODE, Message.DEFAULT_PRIORITY,
> Message.DEFAULT_TIME_TO_LIVE);
>
> 				if (i % 100 == 0) {
> 					System.out.println("Sent message " + i);
> 				}
> 			}
>
> 			long finish = System.currentTimeMillis();
> 			long taken = finish - start;
> 			System.out.println("Sent " + count + " messages in " + taken + "ms");
>
> 			connection.close();
> 		} catch (Exception exp) {
> 			System.out.println("Caught exception, exiting.");
> 			exp.printStackTrace(System.out);
> 			System.exit(1);
> 		}
> 	}
>
> 	public static void main(String[] args) throws Exception {
> 		int count = DEFAULT_COUNT;
> 		if (args.length == 0) {
> 			System.out.println("Sending up to " + count + " messages.");
> 			System.out
> 					.println("Specify a message count as the program argument if you wish
> to send a different amount.");
> 		} else {
> 			count = Integer.parseInt(args[0]);
> 			System.out.println("Sending up to " + count + " messages.");
> 		}
> 		Sender sender=new Sender();
> 		sender.publish(count);
>
> 	}
>
> 	private static class MyExceptionListener implements ExceptionListener {
> 		@Override
> 		public void onException(JMSException exception) {
> 			System.out.println("Connection ExceptionListener fired, exiting.");
> 			exception.printStackTrace(System.out);
> 			System.exit(1);
> 		}
> 	}
> }
>
>
>
> --
> View this message in context: http://qpid.2158936.n2.nabble.com/The-QPID-JMS-0-9-didn-t-suppor-the-feature-of-setting-custom-message-ID-tp7647810.html
> Sent from the Apache Qpid developers mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
> For additional commands, e-mail: dev-help@qpid.apache.org
>
>


-- 
Tim Bish
twitter: @tabish121
blog: http://timbish.blogspot.com/


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org