Jmeter 测试 ActiveMQ 服务

本贴最后更新于 1582 天前,其中的信息可能已经时移俗易

一、什么是jms

二、ActiveMQ介绍

三、JMS 脚本开发

一、什么是jms
JMS(java Message Service):即java消息服务器应用程序接口,是一个java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对jms提供支持。它是java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生,发送,接受消息的接口简化企业应用的开发

也就是:JMS是一个标准或者说是一个协议,通常用于企业应用的消息传递。如图就是JMS Point-to-Point的模型:

image.png

  发送者和接受者:接受者从队列中获取消息,且在成功接收消息之后需向队列应答成功。发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,都不会影响消息被发送到队列。

消息队列:每个消息都被发送到一个特定的队列。队列保留着消息,直到他们被消费或超时。

每个消息只有一个消费者,一旦被消费,消息就不在消息队列中了。

二、ActiveMQ介绍

  它是Apache出品,最流行的,能力最强劲的开源消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者。

  ActiveMQ是通过什么工作模式来进行的?如图:

image.png

ActiveMQ工作模式中的部分解释如下:

ActiveMQ客户端使用Connection Factory对象创建一个连接,向消息服务发送消息以及从消息服务接收消息均是通过此连接来进行

Connection是客户端与消息服务的活动连接。这是一个相当重要的对象,大多数客户端均使用一个连接来进行所有的消息传送。

Session:是用于生产和使用消息的单线程上下文。它用于创建发送和生产者和接收消息的消费者,并为所发送的消息定义发送顺序。

客户端使用Message Producer想指定的物理目标发送消息

客户端使用Message Consumer对象从指定的物理目标接收消息。消费者可以支持同步或异步消息接收。异步使用可通过向消费者注册MessageListener来实现

三、JMS 脚本开发

1、创建jndi.properties文件

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

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory

java.naming.provider.url =

#指定connectionFactory的jndi名字,多个名字之间可以逗号分隔。

connectionFactoryNames = connectionFactory

#注册queue,格式:

#queue.[jndiName] = [physicalName]

#使用时:(Queue)context.lookup("jndiName"),此处是MyQueuePertest

queue.MyQueuePertest = MyQueuePertest

#注册topic,格式:

topic.[jndiName] = [physicalName]

#使用时:(Topic)context.lookup("jndiName"),此处是MyTopicPertest

topic.MyTopicPertest = MyTopicPertest

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

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

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

3、添加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中。

4、启动ActionMQ服务

   启动之后,在浏览器访问url:http://127.0.0.1:6161/admin,默认用户名和密码:admin

5、启动jmeter
添加线程组及JMS的sampler,有三种方式的JMS消息

在jmeter的Sampler下面新建JMS Point-to-Point,信息如下:

QueueuConnectionFactory:MQ连接工厂,此处填写:ConnectionFactory

JNDI name Request queue:请求队列,输入配置文件的MyQueuePertest

JNDI name Receive queue:接收队列名,输入配置文件的MyQueuePertest

Communiction Style:

Content:消息内容,此处填写:jmeter jms point to point,pertest

initial Context Factory:输入配置文件的org.apache.activemq.jndi.ActiveMQInitialContextFactory

JNDI Properties:org.apache.activemq.jndi.ActiveMQInitialContextFactory

Provider URL:ActionMQ地址和端口

如图:

image.png

查看结果

image.png

image.png

测试JMS的PUB/SUB模型

 需要新建立消费者模型,新建取样器:JMS Subscriber

信息如下:

initial Context Factory:org.apache.activemq.jndi.ActiveMQInitialContextFactory

ConnectionFactory:MQ连接工厂,此处填写:ConnectionFactory

Provider URL:

Destination:MyTopicPertest

启动该线程

 需要新建立发布者模型,新建取样器:JMS Publisher

信息如下:

initial Context Factory:org.apache.activemq.jndi.ActiveMQInitialContextFactory

ConnectionFactory:MQ连接工厂,此处填写:ConnectionFactory

Provider URL:

Destination:MyTopicPertest

Text Message:This is test jms publisher

启动该线程

查看发送者

消费者

image.png

消费者

image.png

回帖
请输入回帖内容 ...