Hey Tim,

Thanks a lot for quick reply. I tested with your suggestion, and I am able
to set custom message ID with the help of CustomJmsMessageIDPolicy,
But we have to apply this policy at the connection level, which is a big
problem for us because we can't have a new connection for every new message.

Every message will have different custom MessgeID and we need to set/send
application defined messageID.

Can you please suggest anyway to give precedence of setting messageID on
JMSMessage? 
I tried to use "textMessage.setJMSMessageID("custom-ID");", but this doesn't
help. 

Please suggest any approach to define custom messageID with the help of
JmsMessage object.

Example -

import java.util.Hashtable;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
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.JmsConnectionFactory;
import org.apache.qpid.jms.JmsDestination;
import org.apache.qpid.jms.JmsSession;
import org.apache.qpid.jms.message.JmsMessage;
import org.apache.qpid.jms.message.JmsMessageIDBuilder;
import org.apache.qpid.jms.policy.JmsMessageIDPolicy;
import org.apache.qpid.jms.provider.amqp.message.AmqpJmsMessageFacade;

public class TestQpidSendCustomMessageID implements ExceptionListener{
        
        private static final String QUEUE_NAME = "test-msg-queue";
        private static final String SBUS_NAME = "#####";
        private static final String USERNAME = "######";
        private static final String PASSWORD = "####";
        private static final String QPID_CONNECTION_FACTORY_CLASS =
"org.apache.qpid.jms.jndi.JmsInitialContextFactory";
        
        public static void main(String[] args) throws Exception {
                TestQpidSendCustomMessageID test = new 
TestQpidSendCustomMessageID();
                test.send();
        }
        
        private void send() throws NamingException, JMSException,
InterruptedException {
                Hashtable<String, String> hashtable = new Hashtable<>();
                
                hashtable.put("connectionfactory.SBCF", "amqps://"+ SBUS_NAME
+".servicebus.windows.net?transport.tcpKeepAlive=true&amqp.traceFrames=true&jms.prefetchPolicy.all=1000&jms.forceAsyncSend=true");
                
                hashtable.put(Context.INITIAL_CONTEXT_FACTORY,
QPID_CONNECTION_FACTORY_CLASS);

                Context context = new InitialContext(hashtable);
                
                JmsConnectionFactory connectionFactory = (JmsConnectionFactory)
context.lookup("SBCF");
                
                //Set Custom Jms MessageID Policy
                CustomJmsMessageIDPolicy customJmsMessageIDPolicy = new
CustomJmsMessageIDPolicy();
                connectionFactory.setMessageIDPolicy(customJmsMessageIDPolicy);
                
                Connection connection = 
connectionFactory.createConnection(USERNAME,
PASSWORD);
                connection.setExceptionListener(this);
                
                connection.start();
                
                Session session = connection.createSession(false,
Session.CLIENT_ACKNOWLEDGE);
                Destination destination = session.createQueue(QUEUE_NAME);
                MessageProducer messageProducer = 
session.createProducer(destination);
                
                TextMessage textMessage = session.createTextMessage("Hello -QA 
ASD");
                textMessage.setJMSMessageID("Hello-SetJMSID"); //First Way
                
                ((AmqpJmsMessageFacade) ((JmsMessage)
textMessage).getFacade()).setMessageId("AKQWS:9d678sdfsdsds"); //Second Way
                
                messageProducer.send(textMessage);
                
                System.out.println("**** Published successfully ****");

        }

        @Override
        public void onException(JMSException exception) {
                exception.printStackTrace();
        }
        
        class CustomJmsMessageIDPolicy implements JmsMessageIDPolicy{

                @Override
                public JmsMessageIDPolicy copy() {
                        return new CustomJmsMessageIDPolicy();
                }

                @Override
                public JmsMessageIDBuilder getMessageIDBuilder(JmsSession 
session,
JmsDestination destination) {
                        
                        return new JmsMessageIDBuilder() {
                                
                                @Override
                                public Object createMessageID(String 
producerId, long messageSequence) {
                                        return "test-custom-msg-id"; // How can 
we set message from JmsMessage
Object?
                                }
                        };
                        
                }
                
        }
        
        
}




--
Sent from: http://qpid.2158936.n2.nabble.com/Apache-Qpid-users-f2158936.html

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to