基于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 ...
随机推荐
- Docker 命令自动补全?要的
前言 不知道这个小伙伴有多久没用过 Docker 了, 突然对我说 Docker 命令怎么发生变化了 docker run ... #变成了 docker container run ... 他说,本 ...
- 【复习笔记】重习 AC 自动机
发现已经忘了许多....于是复习一下 基础要点概况 AC 自动机基于 Trie 树 的结构,即构建 AC 自动机前需要先建 Trie. 一个状态中除了转移 \(\delta\) 之外还有失配指针 \( ...
- 题解-CF348E Pilgrims
题面 CF348E Pilgrims 有一棵 \(n\) 个点的 带权 树和 \(m\) 个关键点,要求杀了一个不关键的点,满足最多的关键点到离它最远的所有关键点的路径都被打断.求可以满足的最多关键点 ...
- 题解-洛谷P4859 已经没有什么好害怕的了
洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...
- SP7022 CPATTERN - Cow Patterns
本篇题解用于作者本人加深理解,也欢迎大家阅读. 这道题的正解是\(KMP\)加上树状数组,记录每一个位置前几个位置比其小的.相等的.大的数的数量,比较方式便是比较相应的数量,若相等,则匹配成功. 但是 ...
- redis学习之——主从复制(replication)
准备:拥有linux环境,并安装redis mater:主机,进行写操作 slave:从机,进行读操作 一.配置 继续前边的学习.我们是拷贝redis.conf,文件到了/root /redis 下. ...
- java实现TCP通信(带界面)
服务端: package NetWork; import java.io.*;import java.net.*;import java.awt.event.*;import java.awt.*;i ...
- vscode vue快速新建模板
vscode 文件=>首选项 =>用户代码片段 =>新建全局代码片段 { "Print to console": { " ...
- 【教程】IDEA创建Maven项目并整合Tomcat发布,问题解决大全
一篇入门教程 一.创建项目并运行 参考这个视频,能顺利运行 helloworld ,本人用的 IDEA2020.2.3 .jdk11 .Tomcat9 .Maven3.6 bilibili-IDEA( ...
- Sql Server 数据把列根据指定的内容拆分数据
今天由于工作需要,需要把数据把列根据指定的内容拆分数据 其中一条数据实例 select id , XXXX FROM BIZ_PAPER where id ='4af210ec675927fa016 ...