JMeter RabbitMQ采样器AMQP详解与实战

Posted 51Testing软件测试网

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMeter RabbitMQ采样器AMQP详解与实战相关的知识,希望对你有一定的参考价值。


1、摘要

  JMeter是性能测试中使用非常广泛的工具之一,其中让JMeter能够大放异彩的扩展插件异常重要。本文介绍测试RabbitMQ的扩展插件:AMQP采样器。不同于其他采样器,该插件的使用需要从源码中编译后使用。本文首先对RabbitMQ、AMQP、MQTT等基本概念进行了简要说明。之后将AMQP插件的安装过程,源码编译方法等进行详细说明。之后对该插件的使用方法进行详解,详细介绍采样器中每个字段的含义。最后通过一个实际的JMeter用例说明AMQP采样器的使用方法。

  本文虽然主要介绍AMQP采样器,其实也间接介绍了JMeter的插件知识,从这个角度来看,JMeter有非常好的扩展性,能够实现测试中非常丰富的需求。

2、关键字

  JMeter; AMQP ;RabbitMQ

3、RabbitMQ简介

  要了解RabbitMQ,首先要了解几个基本概念:MQ、JMS、AMQP、MQTT。

  MQ是Message Queue的简称,即消息队列。队列我们可以理解为管道。以管道的方式做消息传递。消息传递作为基本通信机制已经在全世界成功运用。无论是人与人、机器与人还是机器与机器之间,消息传递一直都是唯一常用的通信方式。在双方(或更多)之间交换消息有两种基本机制。

  首先出现的是Java消息传递服务(Java Messaging Service (JMS))。JMS是最成功的异步消息传递技术之一。随着Java在许多大型企业应用中的使用,JMS就成为了企业系统的首选。它定义了构建消息传递系统的API。

  为了通用性,高级消息队列协议(Advanced Message Queueing Protocol (AMQP))应运而生。JMS非常棒而且人们也非常乐意使用它。微软开发了NMS(.NET消息传递服务)来支持他们的平台和编程语言,它效果还不错。但是碰到了互用性的问题。两套使用两种不同编程语言的程序如何通过它们的异步消息传递机制相互通信呢。此时就需要定义一个异步消息传递的通用标准。JMS或者NMS都没有标准的底层协议。它们可以在任何底层协议上运行,但是API是与编程语言绑定的。AMQP解决了这个问题,它使用了一套标准的底层协议,加入了许多其他特征来支持互用性,为现代应用丰富了消息传递需求。

  后来又出现了消息队列遥测传输(Message Queueing Telemetry Transport (MQTT))。已经有了面向基于Java的企业应用的JMS和面向所有其他应用需求的AMQP。为什么我们还需要第三种技术?它是专门为小设备设计的。计算性能不高的设备不能适应AMQP上的复杂操作,它们需要一种简单而且可互用的方式进行通信。这是MQTT的基本要求,而如今,MQTT是物联网(IOT)生态系统中主要成分之一。

  JMS、AMQP、MQTT都是MQ的协议,是需要遵循的一套标准。正如需要TCP/IP来实现OSI七层规范一样,真正在使用的是这些协议的实现。JMS本身有一套Java API可以实现JMS,同时ActiveMQ也支持JMS。事实上,现在流行的MQ实现,都支持多种协议,比如阿里巴巴的RocketMQ?,支持JMS、MQTT。

  今天介绍的RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、php、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。作为一款优秀的AMQP实现,在很多系统中作为消息中间件使用。

  测试RabbitMQ在实际系统中的性能有很多方法,其中使用JMeter的AMQP插件是比较简单的实现方案。

4、插件安装说明

  JMeter插件安装非常简单,只要将扩展插件的jar包拷贝到\lib\ext文件夹下即可。不过AMQP插件只有源码,需要自行编译。

  首先在如下路径下载源码:

https://github.com/jlavallee/JMeter-Rabbit-AMQP

  如果安装了ant,并且了解ivy,可以直接使用工程的ivy.xml进行编译,生成JMeterAMQP.jar。或者根据ivy.xml的依赖配置,手工下载依赖的jar包,具体需要的jar如下:

amqp-client-3.5.1.jar,ApacheJMeter_core.jar,

avalon-logkit-2.0.jar,commons-codec-1.4.jar,

commons-collections-3.2.1.jar,commons-httpclient-3.1.jar,

commons-io-1.4.jar,commons-jexl-2.1.1.jar,

commons-lang3-3.1.jar,commons-logging-1.1.1.jar,

commons-net-1.4.1.jar,jorphan-2.6.jar。

  加入到build path后,编译生成JMeterAMQP.jar。

  之后将JMeterAMQP.jar拷贝到JMeter的\lib\ext路径。

  常见问题:拷贝JMeterAMQP.jar后,打开JMeter无法看到AMQP采样器,日志报错如下:

JMeter RabbitMQ采样器AMQP详解与实战

  需要将amqp-client-3.5.1.jar也拷贝到\lib\ext路径下。再次打开JMeter就可以添加AMQP采样器了。

JMeter RabbitMQ采样器AMQP详解与实战

  直接下载的AMQP插件自己的Publisher和Consumer传递消息没有问题,和其他组件配合使用时中文会出现乱码。修改源码中对消息体的获取,以Consumer为例,修改类com.zeroclue.jmeter.protocol.amqp.AMQPConsumer,将获取返回结果的代码修改如下内容:

JMeter RabbitMQ采样器AMQP详解与实战

  修改为:

JMeter RabbitMQ采样器AMQP详解与实战

  重新编译后替换JMeterAMQP.jar即可解决中文乱码问题。


……


文章选自《51测试天地》第五十二期电子杂志

点击阅读原文查看全文


JMeter RabbitMQ采样器AMQP详解与实战
推荐阅读

点击阅读☞

点击阅读☞

点击阅读☞

点击阅读☞

点击阅读☞

“阅读原文”一起来充电吧!
好看点一下 大家都知道



以上是关于JMeter RabbitMQ采样器AMQP详解与实战的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter对RabbitMQ压力测试

消息队列基础 RabbitMQ与AMQP协议详解——超大规模高可用OpenStack核心技术深入解析系列

消息队列RabbitMQ入门与5种模式详解

RabbitMQ-AMQP模型详解

RabbitMQ-AMQP模型详解二

RabbitMQ详解