You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by garima015 <ga...@rediffmail.com> on 2006/12/18 18:30:28 UTC

Linux performance Issue

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/Linux-performance-Issue-tf2841237.html#a7932932
Sent from the ActiveMQ - User mailing list archive at Nabble.com.