How to perform load test of standalone hornetQ
a4arjun Aug 21, 2013 3:33 AMHi all,
I have configured standalone hornetQ with 3 queues.
I am using JBOSS AS 7.1.1 Final with 2 applications.
1) producer.war- when a rest service is called , it will insert one TextMessage into 3 queues.
Here is the code for producer:
package com.hornetq.producer.service.impl; import javax.annotation.Resource; import javax.enterprise.context.ApplicationScoped; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.log4j.Logger; import com.hornetq.producer.service.QueueProducerTest; @ApplicationScoped public class QueueProducerTestImpl implements QueueProducerTest { private static final Logger logger = Logger.getLogger(QueueProducerTestImpl.class); @Resource(mappedName = "java:/MyConnection") private ConnectionFactory connectionFactory; @Resource(mappedName = "/queue/testQueue1") private Queue queue1; @Resource(mappedName = "/queue/testQueue2") private Queue queue2; @Resource(mappedName = "/queue/testQueue3") private Queue queue3; @Override public void sendMessage() { Connection connection = null; Session session = null; MessageProducer publisher1 = null; MessageProducer publisher2 = null; MessageProducer publisher3 = null; try { connection = this.connectionFactory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); publisher1 = session.createProducer(this.queue1); publisher2 = session.createProducer(this.queue2); publisher3 = session.createProducer(this.queue3); connection.start(); TextMessage textMessage = session.createTextMessage("hello world"); publisher1.send(textMessage); publisher2.send(textMessage); publisher3.send(textMessage); } catch (JMSException jmse) { logger.error("sendMessage JMSException " + jmse.getMessage(), jmse); } finally { try { if (publisher1 != null) { publisher1.close(); } if (publisher2 != null) { publisher2.close(); } if (publisher3 != null) { publisher3.close(); } if (session != null) { session.close(); } if (connection != null) { connection.close(); } } catch (JMSException jmse) { logger.error("sendMessage JMSException finally " + jmse.getMessage(), jmse); } } } }
2) i have consumer.war which has 3 MDBs which will listen to 3 queues.
Here is the code of one consumer, other 2 are same except different queues:
package com.hornetq.consumer.service.impl; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.TextMessage; import org.jboss.ejb3.annotation.ResourceAdapter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/testQueue1"), @ActivationConfigProperty(propertyName = "maxSession", propertyValue = "200"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")}) @ResourceAdapter("MyConnection") public class MessageConsumerQueue1Test extends BaseQueueConsumer { private static final Logger logger = LoggerFactory.getLogger(MessageConsumerQueue1Test.class); @Override public void onMessage(Message message) { if (message instanceof TextMessage) { try { String textMessage = ((TextMessage) message).getText(); logger.info("textMessage:" + textMessage); } catch (JMSException e) { logger.error("JMSException # 1 # Not a valid message for this Queue MDB" + e.getMessage()); } } else { logger.error(" # 1 # Not a valid message for this Queue MDB"); } } }
I want to do a load test on the hornetQ , by sending 200 messages in one second.
I am using Jmeter, I configured jmeter by 20 threads and ramp up time as 1 and loop count as 10, which inserted 200 messages in approx. 8 seconds.
how can achieve the load test to send 200 messages in 1 seconds. Is hardware configuration of my machine will also depend?
I am attaching my jboss stanalone configuration xml file,hornetq-configuration.xml and hornetq-jms.xml
My system configuration:
OS - windows 7 32-bit
processor- pentium dual core CPU- E5400 , 2.7 GHz
RAM - 3 GB
please help.
Thanks in advance.
-
hornetq-jms.xml 1.9 KB
-
hornetq-configuration.xml 2.8 KB
-
standalone-test.xml 21.3 KB