Best bet is to run it with a profiler to figure out where the hot spot
is for linux.

On 12/18/06, garima015 <[EMAIL PROTECTED]> wrote:

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.




--
Regards,
Hiram

Blog: http://hiramchirino.com

Reply via email to