使用Jmeter测试JMS

本文介绍如何使用JMeter 2.8测试ActiveMQ 5.6的JMS消息,包括配置jndi.properties文件、添加activemq-all-5.2.0.jar到JMeter的lib库等步骤,并详细说明三种JMS消息测试方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:使用Jmeter测试ActiveMQ的JMS消息,网上有一篇,但是图片看不了,具体参数填什么也不清楚,因此决定总结这篇

  所使用的Jmeter版本2.8,activemq版本5.6

  一、创建jndi.properties文件

  由于 jmeter 是通过 jndi 来获得 jms 中相关对象的,如 ConnectionFactory 和 Destination,所以在 jmeter 的 classpath 中需要添加一个 jndi.properties 属性文件,用于配置jndi

  创建jndi.properties文件,包含如下内容

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://yourIP:61616
#指定connectionFactory的jndi名字,多个名字之间可以逗号分隔。
#以下为例:
#对于topic,使用(TopicConnectionFactory)context.lookup("connectionFactry")
#对于queue,(QueueConnectionFactory)context.lookup("connectionFactory")
connectionFactoryNames = connectionFactory

#注册queue,格式:
#queue.[jndiName] = [physicalName]
#使用时:(Queue)context.lookup("jndiName"),此处是MyQueue
queue.MyQueue = example.MyQueue

#注册topic,格式:
# topic.[jndiName] = [physicalName]
#使用时:(Topic)context.lookup("jndiName"),此处是MyTopic
topic.MyTopic = ActiveMQ.Advisory.Consumer.Topic.cacheupdate

  保存并把这个文件复制到 JMETER_HOME/bin(JMETER_HOME为 jmeter 的安装目录)目录中。

  二、把jndi.properties放到jmeter的启动jar包中

  由于bin目录并不在jmeter的classpath中,所以需要执行一些额外的工作来把jndi.properties添加到jmeter的classpath中,把jndi.properties打包到jmeter的启动jar包中。jmeter的启动jar包为JMETER_HOME/bin/ApacheJMeter.jar,所以需要把jndi.properties 打包到这个 jar 文件中。直接将文件拖入jar包中即可。

  或者执行如下操作,打开命令行窗口,并定位到 JMETER_HOME/bin 目录,运行如下命令 jar uf ApacheJMeter.jar jndi.properties

 三、添加activemq-all-5.2.0.jar包到Jmeter的lib库

  将ACTIVE_HOME/activemq-all-5.2.0.jar文件复制到JMETER_HOME/lib目录中,jmeter在测试jms的时候会使用到activemq提供的jms的实现类,这些类并没有随jmeter一起分发,需要把这些类添加到jmeter的classpath中。

  四、启动Jmeter测试JMS

  添加线程组及JMS的sampler,有三种方式的JMS消息

  1、Point-to-Point

  填写参数如下:

QueueConnection Factory:connectionFactory
JNDI name Request queue:MyQueue
JNDI name Receive queue:MyQueue
Content:this is a test
Initial Context Factory:org.apache.activemq.jndi.ActiveMQInitialContextFactory
ProviderURL:tcp://yourIP:61616

  2、Publisher

  基本值同Point-to-Point,不同点在于Destination,填写JMS的topic目的地

  若在ActiveMQ中Topics的名字为example.MyTopic

  则jndi.properties文件中定义的topic如下:

  topic.MyTopic = example.MyTopic

  则Destination填写topic.后面的MyTopic

  3、Subscriber

  基本值同Publisher,不同在于可以根据需要填写Client ID,JMS Selector进行消息过滤

  报错:Response message: javax.naming.NameNotFoundException:***

  原因Destination中填写的错了,以为填写ActiveMQ中实际的Topic名

  其实在jndi.properties文件中已经实例化了,topic.MyTopic = example.MyTopic,这里example.MyTopic就是ActiveMQ中的Topic名

  因此实际填写时是填写topic.后的MyTopic   



最新内容请见作者的GitHub页:http://qaseven.github.io/

   

### 使用 JMeter 进行 JMS 协议的配置与测试 #### 配置环境 在使用 JMeter 测试 JMS 协议之前,需要确保所有必要的依赖项已正确加载。由于 JMeter 自身并不提供 JMS 所需的具体实现类,因此必须引入目标 MOM 的相关 jar 包[^1]。 将所选 MOM(如 ActiveMQ)的 `lib` 目录中的 jar 文件复制到 `%JMETER_HOME%/lib` 下。这一步骤是为了让 JMeter 能够识别并调用 JMS 接口所需的类[^2]。 #### 创建 jndi.properties 文件 JNDI 是 Java 命名和目录服务接口,在此场景中用于定位 JMS 提供者的资源。为此,需要创建一个名为 `jndi.properties` 的文件,并将其放置于 `%JMETER_HOME%/lib` 和 `%JMETER_HOME%/bin` 中[^4]。 以下是针对 ActiveMQ 的典型 `jndi.properties` 文件内容: ```properties java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory java.naming.provider.url = tcp://localhost:61616 connectionFactoryNames = ConnectionFactory, QueueConnectionFactory, TopicConnectionFactory queue.MyQueue = exampleQueue topic.MyTopic = exampleTopic ``` 其中: - `java.naming.factory.initial`: 定义初始上下文工厂。 - `java.naming.provider.url`: 指定连接 URL。 - `connectionFactoryNames`: 列举可用的连接工厂名称。 - `queue.MyQueue`, `topic.MyTopic`: 映射队列或主题名称至实际资源。 该文件还需被打包进入 `%JMETER_HOME%/bin/ApacheJMeter.jar` 中以确保其被正确读取。 #### 添加 JMS Publisher 或 Subscriber Sampler 在 JMeter GUI 中,可以通过以下方式添加 JMS 测试组件: 1. **右键点击线程组** -> **Add** -> **Sampler** -> **JMS Publisher / JMS Subscriber**。 2. 根据需求选择合适的采样器类型: - 如果要发送消息,则选用 **JMS Publisher**。 - 如果要接收消息,则选用 **JMS Subscriber**。 ##### JMS Publisher 参数设置 | 字段 | 描述 | |------|------| | Initial Context Factory | 设置为 `org.apache.activemq.jndi.ActiveMQInitialContextFactory` | | Provider URL | 如 `tcp://localhost:61616` 表示连接地址 | | Connection Factory | 默认为 `ConnectionFactory` | | Destination Type | 可选 `QUEUE` 或 `TOPIC` | | Destination Name | 对应队列或主题名称 | ##### JMS Subscriber 参数设置 订阅者的主要区别在于需要指定监听的目标以及确认模式(Acknowledge Mode),其余参数基本一致。 #### 启动测试计划 完成以上步骤后即可运行测试计划。观察结果树或汇总报告以评估性能指标,例如吞吐量、响应时间等。 --- ### 示例代码片段 如果需要自定义初始化过程或者动态调整某些属性,可以借助 BeanShell PreProcessor 来编写脚本逻辑。下面是一个简单的例子展示如何通过脚本修改部分参数: ```beanshell import javax.jms.*; import javax.naming.*; // 动态更新 provider url String newUrl = "tcp://" + vars.get("host") + ":61616"; props.put(Context.PROVIDER_URL, newUrl); log.info("Updated Provider URL to: " + newUrl); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值