[jmeter]-hornetq测试

I figured out the problem, for the benefits of others.

1. These are the jars needed in jmeter/lib : netty.jar,jboss-jms-api.jar,netty.jar,jnp-client.jar,hornetq-transports.jar,hornetq-jms-client.jar,hornetq-core-client.jar

2. use the connection factory name : ConnectionFactory which is defeined in hornetq configuration

3. define your jms topic used in jmeter in hornetq-jms.xml

 

 

 

Sunday, April 11, 2010

HornetQ JMS Queue testing using Sender and Consumer

Here is a dummy demo of how to test JMS performance by JMeter sender(Point-to-Point) and Consumer. 
I am taking ExampleQueue as an example in HornetQ itself, by using JMeter sender to add load to the ExampleQueue, and write some code to create a dummy consumer listening to ExampleQueue to print out received text:
first you need to add .jar into jmeter\lib which you can get from HornetQ lib:

hornetq-core-client.jar
hornetq-jms-client.jar
hornetq-transports.jar
netty.jar
jnp-client.jar
jboss-jms-api.jar

Sender by Jmeter(click to see big pic):

看附件sender

Consumer by Jmeter(You need to come up with JMSCorrelationID in JMS header otherwise you may get an Error):

ERROR - jmeter.protocol.jms.sampler.FixedQueueExecutor: Correlation id is null. Set the JMSCorrelationID header

Here is my configuration(click to see big pic):

看附件p2p

multi-thread Sender by Java code sample:

package msq;
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.NamingException;
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;

public class JMS_Q_Sender_threads {

static int TASK_NUM=10;

static class MyTask implements Runnable{

public void run(){

try{
// Step 1. Create an initial context to perform the JNDI lookup.
Hashtable env = new Hashtable();
env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
Context ctx = new InitialContext(env);

// Step 2. Lookup the connection factory
ConnectionFactory cf = (ConnectionFactory)ctx.lookup("/ConnectionFactory");

// Step 3. Lookup the JMS queue
Queue queue = (Queue)ctx.lookup("/queue/ExampleQueue");

// Step 4. Create the JMS objects to connect to the server and manage a session
Connection connection = cf.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

// Step 5. Create a JMS Message Producer to send a message on the queue
MessageProducer producer = session.createProducer(queue);

// Step 6. Create a Text Message and send it using the producer
final int numMessages = 5;
for (int i = 0; i < numMessages; i++){
TextMessage message = session.createTextMessage("Hello, HornetQ!");
producer.send(message);
System.out.println(Thread.currentThread().getId()+": Sent message: " + message.getText());
}
// Finally, we clean up all the JMS resources
connection.close();
} catch (Exception e){}

}

}
public static void main(final String[] args) throws NamingException, JMSException

MyTask task=new MyTask();
ExecutorService pool=Executors.newFixedThreadPool(5);
for (int i=0;i < TASK_NUM ; i++){
pool.submit(task);
}
pool.shutdown();
}

}

Consumer by Java code sample:
package msq;
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.NamingException;

public class JMS_Q_Consumer {
public static void main(final String[] args) throws NamingException, JMSException
{
// Step 1. Create an initial context to perform the JNDI lookup.
Hashtable env = new Hashtable();
env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
Context ctx = new InitialContext(env);

// Step 2. Lookup the connection factory
ConnectionFactory cf = (ConnectionFactory)ctx.lookup("/ConnectionFactory");

// Step 3. Lookup the JMS queue
Queue queue = (Queue)ctx.lookup("/queue/ExampleQueue");

// Step 4. Create the JMS objects to connect to the server and manage a session
Connection connection = cf.createConnection();
Session session2 = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer messageConsumer = session2.createConsumer(queue);

// Step 5. Start the Connection so that the server starts to deliver messages
connection.start();

int j = 0;
// final int num = 5; 
// while(j <= num){
final long duration = 60000;

long start = System.currentTimeMillis();

while (System.currentTimeMillis() - start <= duration){
// Step 6. Receive the message
TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000);
if (messageReceived != null) {
j++;
System.out.println(j + "Received message: " + messageReceived.getText());
}
else {
System.out.println("no message detected");
break ;
}

}
long end = System.currentTimeMillis();

double rate = 1000 * (double)j / (end - start);

System.out.println("We consumed " + j + " messages in " + (end - start) + " milliseconds");

System.out.println("Actual consume rate was " + rate + " messages per second");
// Finally, we clean up all the JMS resources
connection.close();
}

}
You can create any type of consumer based on your requirement and get the performance data accordingly.
And also I used Jconsole Mbeans to help monitoring the Queue JMS message at the mean time. So that we can notice if there is anything wrong with the Queue ASAP.

时间: 2024-09-20 09:45:34

[jmeter]-hornetq测试的相关文章

服务器-jmeter压力测试的一些问题(太多了所以没办法整理个标题出来)

问题描述 jmeter压力测试的一些问题(太多了所以没办法整理个标题出来) 刚刚发了个问题,发现标题的问题已经有好心人给我回复了,其他的问题大概大家都不会想到要看,所以另开一个说一下!求各种大神拯救一下我这个卡死在这里的新人吧QAQ再不交活领导会手撕实习生的23333唔,是这样的. 最近领导给我的任务是用JMeter给我们的手游服务器端做压力测试,其中注册,登陆和验证都是http协议的,之后的一些类似创建角色的命令都是socket协议的,现在我要完成一个流程就是:注册---->用注册的账号登陆-

线程-jmeter压力测试的并发数概念

问题描述 jmeter压力测试的并发数概念 我在学习jmeter压力测试java web程序,现在的要求是"调整并发数,压到程序挂为止",我不知道什么是并发数. jmeter建好线程组后,有两个参数,一个是线程数,一个是循环次数. 我刚开始是把循环次数设置为1,不断提高线程数来进行压力测试的,线程数一直提高到1700才能出现error. 但是有大神跟我说线程数一般都只提高到100,不可能提高到1600. 要是这样的话,我就应该在循环次数上下功夫了,那么我想问这个并发数到底是和哪个有关,

JMeter远程测试,每个实际测试人员都要学习的

详解JMeter远程测试(1) 如果运行JMeter客户端的机器性能不能满足测试需要,那么测试人员可以通过单个JMeter GUI客户端来控制多个远程JMeter服务器,以便对服务器进行压力测试,模拟足够多的并发用户.通过远程运行JMeter,测试人员可以跨越多台低端计算机复制测试,这样就可以模拟一个比较大的服务器压力.一个JMeter GUI客户端实例,理论上可以控制任意多的远程JMeter实例,并通过它们收集测试数据,如图11-3所示.这样一来,就有了如下特性: 保存测试采样数据到本地机器.

Jmeter分布式测试

在使用Jmeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能. 一.Jmeter分布式执行原理: 1.Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave). 2.执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的. 3.执行完成后,

windows系统中安装Jmeter压力测试工具

  Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如静态文件.Java 小服务程序.CGI 脚本.Java 对象.数据库, FTP 服务器, 等等.JMeter 可以用于对服务器.网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能. JMeter的作用 1.能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样

JMeter压力测试问题

问题描述 刚接触到Jmeter,还不太熟悉,现在需要进行Http测试,方法是post,需要向服务器传递一个数据包,请问如何发?要测试的应用是:用户要上传自己的数据,并没有对应的页面,只是客服端将自己的数据发送到一个URL,然后服务器处理并存储到数据库中.我要测试当大量用户同时上传数据时,系统的性能问题. 解决方案 1.在测试计划中添加一个"线程组" (添加->Thread(Users)->线程组) 如果是在负荷测试(就是不断的请求),设置循环次数(可以挑中永远让他一直跑)

JMeter远程测试,每个实际测试人员都要学习的(3)

同时创建一个规则(Qolicy)文件,添加computer_name行到/etc/hosts. 3.如何使用不同端口号 默认情况下,JMeter使用标准RMI端口号1099(这是可以改变的).要想成功改变使用的端口号,需满足如下条件: 在远程服务器,启动Rmiregistry使用新端口号. 在远程服务器,启动JMeter并预先定义server_port属性. 在客户端,更新remote_hosts属性,在其中包含remote host:port设置. 从JMeter 2.1.1版本开始,jmet

Jmeter压力测试模拟并发

JMeterPlugins(jmeter插件):http://jmeter-plugins.org/downloads/all/ 下面直接贴使用步骤: 第二步:添加Sampler 第三步:配置HTTP请求 第四步:添加监听器 最后配置线程组: 好了,现在按一下 ctrl+R 开始运行,并发发送请求了. 最新内容请见作者的GitHub页:http://qaseven.github.io/

jmeter 3 测试工具

1.下载 apache官网下载.推荐zip文件,解压后双击 bin/ApacheJMeter.jar 即可打开. 2.测试过程 2.1 创建线程组 添加|threads.见图2-1 . 图2-1 2.2 设置请求参数 选中已创建的线程组 | 右击添加Sampler. 以简单的Http Get请求为例,见图2-2. 图2-2. 2.3 查看结果 选中已创建的线程组 | 右击添加监听器. 有简单的聚合报告,见图2-3. 图2-3 也有详细的监听器,查看结果树,见图2-4.记录了每次的请求报文和返回报