基于Jmeter实现Rocketmq消息发送
在互联网企业技术架构中,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里配置上线程数和持续时间就可以开始压测了。
基于Jmeter实现Rocketmq消息发送的更多相关文章
- 一张图进阶 RocketMQ - 消息发送
前 言 三此君看了好几本书,看了很多遍源码整理的 一张图进阶 RocketMQ 图片链接,关于 RocketMQ 你只需要记住这张图!觉得不错的话,记得点赞关注哦. [重要]视频在 B 站同步更新,欢 ...
- RocketMQ 消息发送system busy、broker busy原因分析与解决方案
目录 1.现象 2.原理解读 2.1 RocketMQ 网络处理机制概述 2.2 pair.getObject1().rejectRequest() 2.3 漫谈transientStorePoolE ...
- RocketMQ之九:RocketMQ消息发送流程解读
在讨论这个问题之前,我们先看一下Client的整体架构. Producer与Consumer类体系 从下图可以看出以下几点:(1)Producer与Consumer的共同逻辑,封装在MQClientI ...
- RocketMQ 消息发送
消息发送基本流程: 1.消息验证 验证主题(topic),消息体不能为空和大小不能超过4M. 2.路由查找 a.查看缓存,是否有topic的路由信息. b.如果没有则到NameServer中获取路由信 ...
- RocketMQ消息发送的队列选择与容错策略
一个topic有多个队列,分散在不同的broker.producer在发送消息的时候,需要选择一个队列 producer发送消息全局时序图: 队列选择与容错策略结论: 在不开启容错的情况下,轮询队列进 ...
- RocketMQ消息发送流程和高可用设计
(源码阅读先看主线 再看支线 先点到为止 后面再详细分解) 高可用的设计就是:当producer发送消息到broker上,broker却宕机,那下一次发送如何避免发送到这个broker上,就是采用La ...
- RocketMQ(八):消息发送
匠心零度 转载请注明原创出处,谢谢! RocketMQ网络部署图 NameServer:在系统中是做命名服务,更新和发现 broker服务. Broker-Master:broker 消息主机服务器. ...
- RocketMQ的消息发送及消费
RocketMQ消息支持的模式: 消息支持的模式分为三种:NormalProducer(普通同步),消息异步发送,OneWay. 消息同步发送: 普通消息的发送和接收在前面已经演示过了,在前面的案例中 ...
- 程序重启RocketMQ消息重复消费
最近在调试RocketMQ消息发送与消费的Demo时,发现一个问题:只要重启程序,RocketMQ消息就会重复消费. 那么这是什么原因导致的,又该如何解决呢? 经过一番排查,发现程序使用的Rocket ...
随机推荐
- Panda交易所视点观察:政府连发区块链建设文件,相关概念股受追捧
日前,Panda交易所从北京市地方金融监督管理局获悉,证监会已同意在北京.苏州.上海.浙江.深圳等地区的区域性股权市场参与区块链建设工作.以上5市金融监管局将按照中国证监会的统一部署要求推进建设工作. ...
- 笔记-Cats Transport<已写题解>
笔记-Cats Transport Cats Transport 令 \(D_i=\sum_{j=1}^id_i\),\(T_i=t_i-D_{h_i}\). 为 \(T_i\) 从小到大排序,令 \ ...
- K8s 终将废弃 docker,TKE 早已支持 containerd
近日 K8s 官方称最早将在 1.23版本弃用 docker 作为容器运行时,并在博客中强调可以使用如 containerd 等 CRI 运行时来代替 docker.本文会做详细解读,并介绍 dock ...
- mysql 5.7全备脚本
#!/bin/bash mysql_user="root" mysql_password="mysqlpassword" mysql_host="19 ...
- Linux下修改禅道端自定义端口号
第一种方式 一. 首先,如果我们的服务器的80端口没有开放的话,那么我们就是只能修改Apache应用服务的端口了,其实非常简单,安装完成禅道后,在任意目录下输入命令: /opt/zbox ...
- vue第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法)
第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法) #课程目标 了解 vue 框架的特点 掌握创建 vue 实例 掌握 data ...
- 初始Node
node是什么? 一句话: 服务器 什么是服务器: 一句话: 客户端访问 并且能够响应 为什么: 一句话: 执行效率高 #安装 #控制台 切换磁盘: e: 改变目录: cd 目录 cd.. ...
- [RoarCTF 2019]Easy Calc
[RoarCTF 2019]Easy Calc 题目 题目打开是这样的 查看源码 .ajax是指通过http请求加载远程数据. 可以发现有一个calc.php,输入的算式会被传入到这个php文件里,尝 ...
- Linux下安装ffmpeg,视频格式转换
下载ffmpeg 从ffmpeg官网:http://ffmpeg.org/download.html 下载最新的ffmpeg安装包,然后通过如下命令解压: 解压 ffmpeg-*.tar.bz2 文件 ...
- robotframework中的参数展开
robot调用关键字传参的方式是用分隔符分开不同参数,如 keyword arg1 arg2 arg3 arg4 当参数中传入了使用@符号的列表变量时,@符号会将列表展开: @{list1}= Cre ...