I am facing a really bad performance of ActiveMq on linux box. 
When running on windows 1000 transactions are taking 2 seconds and when
running on Linux same are taking 40 sec. 
Please if anybody can tell me solution to performance issue. 

Here is the code i am using to send and receive the message. 

Thanks in advance 

public class Requestor{ 
        private Session session; 
        private Destination replyQueue; 
        private MessageProducer requestProducer; 
        private MessageConsumer replyConsumer; 
        Logger logger = null; 
        
        /** 
         * Constructor 
         */ 
        protected Requestor() { 
                super(); 
                logger = LoggerWrapper.getLogger(this.getClass().getName()); 
        } 
        
        /** 
         * This method will return the object of Requestor 
         * @param connection, Connection 
         * @param requestQueueName , String 
         * @return  Requestor object 
         * @throws JMSException 
         * @throws NamingException 
         */ 
        public static Requestor newRequestor(Connection connection, String
requestQueueName)throws JMSException, NamingException { 
                Requestor requestor = new Requestor(); 
                requestor.initialize(connection, requestQueueName); 
                return requestor; 
        } 
        
        /** 
         * This method will initialize the Producer and Consumer on request
and reply queue 
         * @param connection, Connection 
         * @param requestQueueName , String 
         * @throws NamingException 
         * @throws JMSException 
         */ 
        protected void initialize(Connection connection, String
requestQueueName)throws NamingException, JMSException { 
                session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE); 
                Destination requestQueue =
session.createQueue(requestQueueName); 
        
                replyQueue = session.createTemporaryQueue(); 
                requestProducer = session.createProducer(requestQueue); 
               
requestProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 
                replyConsumer = session.createConsumer(replyQueue); 
                replyConsumer.receive(10); 
        } 
        
        /** 
         * This method is used to send the message to queue 
         * @param message 
         * @throws JMSException 
         */ 
        public String send(String message) throws JMSException { 
                TextMessage requestMessage = (TextMessage)
session.createTextMessage(); 
                requestMessage.setText(message); 
                requestMessage.setJMSReplyTo(replyQueue); 
                requestProducer.send(requestMessage); 
                return receiveSync(); 
        } 
        
        /** 
         * This method is used to receive the message from the queue 
         * @return String 
         * @throws JMSException 
         */ 
        private String receiveSync() throws JMSException { 
                TextMessage replyMessage = null; 
                Message msg =  replyConsumer.receive(); 
                
                if (msg instanceof TextMessage){ 
                        replyMessage = (TextMessage) msg; 
                } 
                logger.debug("receive Sync:"+ new Date().getTime()); 
                return replyMessage.getText(); 
    } 
} 

public class Replier implements MessageListener { 

        private Session session; 
        Logger logger = null; 
    Engine engineRef = null; 
    Transformer transformerRef = null; 
    MessageConsumer requestConsumer = null; 
    Destination replyDestination = null; 
    private static Map destinationMap = new HashMap(); 
    /** 
     * Constructor 
     * 
     */ 
        protected Replier(){ 
        super(); 
                logger = LoggerWrapper.getLogger(this.getClass().getName()); 
        } 
        
        /** 
         * This will return the instance of replier 
         * @param connection, Connection 
         * @param requestQueueName 
         * @return 
         * @throws Exception 
         */ 
        public static Replier newReplier(Connection connection,String
requestQueueName ,Engine engine,Transformer transformer)throws Exception { 
                Replier replier = new Replier(); 
                replier.initialize(connection,
requestQueueName,engine,transformer); 
                return replier; 
        } 
        
        /** 
         * This method will initilize the consumer on request queue 
         * @param connection 
         * @param requestQueueName 
         * @throws Exception 
         */ 
        protected void initialize(Connection connection, String
requestQueueName, Engine engine,Transformer transformer)throws Exception { 
                session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE); 
                
        // Create the destination (Topic or Queue) 
                //Destination requestQueue =
session.createQueue(requestQueueName+"?consumer.retroactive=true"); 
                Destination requestQueue =
session.createQueue(requestQueueName); 
                requestConsumer = session.createConsumer(requestQueue); 
                MessageListener listener = this; 
                requestConsumer.setMessageListener(listener); 
                engineRef = engine; 
                transformerRef = transformer; 
        } 
        
        /** 
         * This method will be called when ever the message will be placed
on Message queue 
         */ 
        public void onMessage(Message message) { 
                try { 
                        logger.debug("On message:"+ new Date().getTime()); 
                        if ((message instanceof TextMessage) &&
(message.getJMSReplyTo() != null)) { 
                                TextMessage requestMessage = (TextMessage)
message; 
                                String contents = requestMessage.getText(); 

                                Object obj =
transformerRef.transform(contents); 
                engineRef.process(obj); 
                contents = (String)transformerRef.transform(obj); 
                
                if(null ==
destinationMap.get(message.getJMSReplyTo().hashCode())){ 
                   destinationMap.put(message.getJMSReplyTo().hashCode(),
message.getJMSReplyTo()); 
                   replyDestination = message.getJMSReplyTo(); 
                   logger.info("In new"); 
                }else{ 
                replyDestination = (Destination)
destinationMap.get(message.getJMSReplyTo().hashCode()); 
                logger.info("in already"); 
                }   
  
     MessageProducer replyProducer =
session.createProducer(replyDestination); 
                                TextMessage replyMessage =
session.createTextMessage(); 
                                replyMessage.setText(contents); 
                               
replyMessage.setJMSCorrelationID(requestMessage.getJMSMessageID()); 
                                replyProducer.send(replyMessage); 
                        } 
                }catch (JMSException ex) { 
                        logger.fatal("Failing while reading the message from
queue"+ex.getMessage(),ex); 
                }catch (Exception e) { 
                        logger.fatal("Failing while transforming the
message"+e.getMessage(),e); 
                } 
        } 
        
} 

-- 
View this message in context: 
http://www.nabble.com/Performance-Issue-tf2841698.html#a7934436
Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.

Reply via email to