在互联网企业技术架构中,MQ占据了越来越重要的地位。系统解耦、异步通信、削峰填谷、数据顺序保证等场景中,到处都能看到MQ的身影。

  而测试工程师在工作中,也经常需要和mq打交道,比如构造测试数据,触发某些业务场景,以及针对mq的性能测试等。

  目前业界中比较知名的mq产品有kafka、rabbitmq、rocketmq等。今天我主要来介绍下如何使用Jmeter来向rocketmq发送消息,实现对mq发消息功能的性能测试。

先来简单介绍下Rocketmq

RocketMQ 是一款分布式、队列模型的消息中间件,是阿里巴巴集团自主研发的专业消息中间件,历经多次天猫双十一海量消息考验。目前已经捐赠给Apache基金会,并于2016年11月成为Apache 孵化项目。

1、MQ基本概念

Message:消息,消息队列中信息传递的载体

Topic:消息主题,一级消息类型,通过 Topic 对消息进行分类

Tag:消息标签,二级消息类型,用来进一步区分某个 Topic 下的消息分类

Producer:消息生产者,也称为消息发布者,负责生产并发送消息

Consumer:消息消费者,也称为消息订阅者,负责接收并消费消息

2、RocketMQ 的 4 个组件

分别是 nameserver、broker、producer 和 consumer

Broker: 集群最核心模块,主要负责 Topic 消息存储、消费者的消费位点管理(消费进度)Producer: 消息生产者,每个生产者都有一个 ID(编号)

nameserver: 存储当前集群所有 Brokers 信息、Topic 跟 Broker 的对应关系

Consumer: 消息消费者,每个订阅者也有一个 ID(编号)

3、MQ消息收发模型

理解上面几个概念后,我们来编写Jmeter脚本。

在idea中创建一个Java工程,并引入Rocketmq和Jmeter的依赖包,先编写一个demo脚本。Rocketmq的消息发送代码非常的简单,几行代码轻松搞定,代码如下:

运行脚本,可以看到打印的结果“SEND_OK”字样,代表消息发送成功。

登录到rocketmq控制台页面,可以搜索到刚才发送的消息。

到目前为止,测试脚本已经调试通过,只需要将脚本转换为Jmeter的脚本即可。具体分为以下几步:

1、 创建一个测试类,实现Jmeter的JavaSamplerClient接口,需要实现接口中的4个方法,分别为:

setupTest:脚本的初始化操作,每个线程启动时执行,且仅执行一次

runTest:Jmeter线程循环执行的方法

teardownTest:Jmeter结束方法,每个线程结束时执行,且仅执行一次

getDefaultParameters:需要暴露在Jmeter界面中的参数,本文中暂时不需要

根据四个方法的特点,将对应的mq代码操作放到不同方法中,详细解释可见注释代码如下:

2、 将Java脚本及其依赖包导出为jar包,然后放到jmeter的lib/ext目录下

3、 打开Jmeter,新建“Java请求”,选择刚才的写的脚本类

就这样,一个基于Jmeter的发送MQ消息脚本就完成了,如果想做压测的话,在Jmeter里配置上线程数和持续时间就可以开始压测了。

最新文章

  1. [转]利用URLConnection来发送POST和GET请求
  2. 我的angularjs源码学习之旅2——依赖注入
  3. Eclipse 开发 jsp
  4. C# 获取本机指定类型指定网卡的Ip地址
  5. mac下apache配置,解决It is not safe to rely on the system's timezone settings.
  6. c#异步调用
  7. 电Call记录统计查询sql
  8. 在php中需要用到的mysql数据库的简单操作
  9. (ACM)C++ STL 训练(第一天)
  10. input单选框全选与反选
  11. (C#)Windows Shell 外壳编程系列8 - 同后缀名不同图标?
  12. Java关键字(六)——super
  13. Atitit s2018 s3 doc list alldvc.docx .docx s2018 s3f doc compc s2018 s3f doc homepc sum doc dvcCompc dtS312 s2018 s3f doc compc\Atitit PathUtil 工具新特性新版本 v8 s312.docx s2018 s3f doc compc\Atitit 操作日
  14. ORM常用字段介绍
  15. php soapclient 超时 设置
  16. 附003.Docker Compose命令详解
  17. c++之enum(枚举)可以没有枚举名
  18. Python引用(import)文件夹下的py文件的方法
  19. Linux下chkconfig命令详解转载
  20. MS datatype define(微软数据类型定义)

热门文章

  1. 手把手教你写DI_1_DI框架有什么?
  2. 【复习笔记】重习 AC 自动机
  3. 题解 P5401 [CTS2019]珍珠
  4. rsync 参数说明及使用参数笔记好文摘抄
  5. mysql聚簇索引和非聚簇索引
  6. Feign使用注意事项
  7. uni-app开发中的各种问题处理
  8. 一、eclipse配置TestNG
  9. ASP.NET Core静态文件中间件[1]: 搭建文件服务器
  10. 精尽Spring MVC源码分析 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping