性能测试工具 Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能

白纸 · 2017年08月01日 · 最后由 blabla 回复于 2017年08月02日 · 3001 次阅读
本帖已被设为精华帖!

前言


JMS 介绍:JMS 即 Java 消息服务(Java Message Service)应用程序接口,是一个 Java 平台中关于面向消息中间件(MOM)的 API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。(百度😉 )

本文只测试 ActiveMQ,其他消息中间件应该同理.

ActiveMQ 介绍


JMS 常见 2 种消息模型:

  1. 点对点 (Queues 队列)
    生产者产生消息,仍 1 条消息给 ActiveMQ,消费者监听 ActiveMQ,从 ActiveMQ 中取走 1 条消息,并销毁这个消息,且只会有一个监听的消费者取走.其他消费者不会取走信息
  2. 广播/订阅 (Topics 队列)
    广播出 1 条消息给 ActiveMQ,订阅监听 ActiveMQ,所有当时监听 ActiveMQ 的订阅都可以取到这条消息,并销毁这个消息,

3 . 虚拟 Topics
为什么说 2 种消息模型,这里会有第三种,因为 Topics 队列的性质决定,当我要发消息给很多订阅,但是如果订阅监听服务挂掉,就不能收到这个消息,导致消息未发布到这个订阅,所以引申出第三个消息模型,虚拟 Topics.
广播出 1 条消息给 ActiveMQ Topics 队列,ActiveMQ 会自动转换给要分发消息的订阅 Queues 队列.然后订阅监听 Queues 队列去取走消息.这 2 种消息模型的结合,产生出第三种消息模型,虚拟 Topics.

准备工作


以 ActiveMQ 为例子,使用 jmeter 测试 JMS.

  • Jmeter 版本:3.2
  • ActiveMQ 版本 5.14.5
编写jndi.properties添加到ApacheJMeter.jar
  • 新建jndi.properties到 jmeter/bin 目录下
  • 复制内容为:
java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://IP:61616 

connectionFactoryNames = connectionFactory

queue.T_MDM_Q = Queue.T_MDM
queue.T_IPS_Q= Queue.T_IPS

topic.T_MDM_T= VirtualTopic.T_MDM
topic.T_IPS_T= VirtualTopic.T_IPS

java.naming.factory.initial:ActiveMQ jar包中 init 所需的 类名
java.naming.provider.url:ActiveMQ的地址
connectionFactoryNames:链接工厂名称
queue.T_MDM_Q:队列名称
queue:说明是queue队列
T_MDM_Q:自定义字段,在后面用来指向队列名称
同理topic.T_MDM_T

  • 把配置文件打到ApacheJMeter.jar 中 在 jmeter/bin 目录下运行
    jar uf ApacheJMeter.jar jndi.properties
下载 ActiveMQ

把 ActiveMQ 下 activemq-all-x.x.x.jar放到 Jmeter/lib 下




配置 Jmeter 进行测试 点对点 (Queues 队列)


  1. 待测消息模型:点对点 (Queues 队列)
  2. 待测队列名称:Queue.T_MDM

右键》添加》sampler》JMS point-to-point 添加一个队列的界面


QueueConnection Factory:jndi.properties中 connectionFactoryNames 字段
JNDI Name Request queue:生产者向哪个队列插入消息,jndi.properties中对应待测队列名称的 queue.xxxxx
JNDI Name Reply queue:消费者从哪个队列取消息,jndi.properties中对应待测队列名称的 queue.xxxxx
Content:消息内容
InitialContextFactory:org.apache.activemq.jndi.ActiveMQInitialContextFactory
Provider URL:ActiveMQ 地址

配置 Jmeter 进行测试 发布/订阅 (Topic 队列)


  1. 待测消息模型:发布/订阅 (Topic 队列)
  2. 待测队列名称:VirtualTopic.T_MDM
配置发布 Publisher

右键》添加》sampler》JMS Publisher 添加一个 Publisher 界面


InitialContextFactory:org.apache.activemq.jndi.ActiveMQInitialContextFactory
Provider URL:ActiveMQ 地址
QueueConnection Factory:jndi.properties中 connectionFactoryNames 字段
Destination:发布往队列的名称,jndi.properties中对应 Topic 队列名称的 topic.xxxx
Text Massage:发布的消息

配置订阅 Subscriber

右键》添加》sampler》JMS Subscriber 添加一个 Publisher 界面

总结


上面只介绍了 ActiveMQ 的配置方法,因为我也只调了 ActiveMQ,其他 JMS 中间件没有试过,如果你们项目中需要,可以试一下.

Jmeter 测试 JMS 中涉及的其他参数设置,可能会用到的,查看 Jmeter 说明http://jmeter.apache.org/usermanual/build-jms-point-to-point-test-plan.html

共收到 3 条回复 时间 点赞
恒温 将本帖设为了精华贴 08月02日 09:39

能测 RocketMQ 吗?

blabla 回复

应该 JMS 类的消息中间件 都可以测试,因为我们只用到了 ActiveMQ,其他中间件没来得及测.

白纸 回复

应该不行。RocketMQ 没有支持 JMS 标准

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册