在互联网企业技术架构中,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消息发送的更多相关文章

  1. RocketMQ 消息发送system busy、broker busy原因分析与解决方案

    目录 1.现象 2.原理解读 2.1 RocketMQ 网络处理机制概述 2.2 pair.getObject1().rejectRequest() 2.3 漫谈transientStorePoolE ...

  2. RocketMQ之九:RocketMQ消息发送流程解读

    在讨论这个问题之前,我们先看一下Client的整体架构. Producer与Consumer类体系 从下图可以看出以下几点:(1)Producer与Consumer的共同逻辑,封装在MQClientI ...

  3. RocketMQ 消息发送

    消息发送基本流程: 1.消息验证 验证主题(topic),消息体不能为空和大小不能超过4M. 2.路由查找 a.查看缓存,是否有topic的路由信息. b.如果没有则到NameServer中获取路由信 ...

  4. RocketMQ消息发送的队列选择与容错策略

    一个topic有多个队列,分散在不同的broker.producer在发送消息的时候,需要选择一个队列 producer发送消息全局时序图: 队列选择与容错策略结论: 在不开启容错的情况下,轮询队列进 ...

  5. RocketMQ消息发送流程和高可用设计

    (源码阅读先看主线 再看支线 先点到为止 后面再详细分解) 高可用的设计就是:当producer发送消息到broker上,broker却宕机,那下一次发送如何避免发送到这个broker上,就是采用La ...

  6. RocketMQ(八):消息发送

    匠心零度 转载请注明原创出处,谢谢! RocketMQ网络部署图 NameServer:在系统中是做命名服务,更新和发现 broker服务. Broker-Master:broker 消息主机服务器. ...

  7. RocketMQ的消息发送及消费

    RocketMQ消息支持的模式: 消息支持的模式分为三种:NormalProducer(普通同步),消息异步发送,OneWay. 消息同步发送: 普通消息的发送和接收在前面已经演示过了,在前面的案例中 ...

  8. 程序重启RocketMQ消息重复消费

    最近在调试RocketMQ消息发送与消费的Demo时,发现一个问题:只要重启程序,RocketMQ消息就会重复消费. 那么这是什么原因导致的,又该如何解决呢? 经过一番排查,发现程序使用的Rocket ...

  9. Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能-转自阿里中间件

    引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注. ...

  10. 转 Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和优势

    Kafka.RabbitMQ.RocketMQ等消息中间件的对比 —— 消息发送性能和优势 引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前 ...

随机推荐

  1. 在Application中集成Microsoft Translator服务之使用http获取服务

    一.创建项目 首先我们来创建一个ASP.NET Application 选择时尚时尚最时尚的MVC,为了使演示的Demo更简单,这里选择无身份验证 二.创建相关类 项目需要引入之前两个类AdmAcce ...

  2. lecture7-序列模型及递归神经网络RNN

    Hinton 第七课 .这里先说下RNN有recurrent neural network 和 recursive neural network两种,是不一样的,前者指的是一种人工神经网络,后者指的是 ...

  3. Android ant自动打包 crunch 报错

    解决办法: 修改SDK_HOME/tool/ant/build.xml. <property name="aapt.ignore.assets" value="&l ...

  4. 演练2-2:Guestbook示例应用程序

    为使Guestbook应用程序有用,我们需要为用户提供一些提交数据的方式,将这些数据存储起来,以便稍后进行查看.为了达到这一目标,我们打算对应用程序添加一个数据库,将其作为该留言簿的后台存储库. 1. ...

  5. Log4.Net 在Winfrom、MVC、ashx程序里的使用,ashx程序里使用异步

    最近做一个双11活动的,是一套相关的H5页面.本来以为难度不大,但是做下来几天还是遇到些问题.就总结一下吧,还是有收获的. 1.在H5页面中,有一个遮罩层,还是挺有意思的.直接用div+css控制遮罩 ...

  6. UVA - 11997:K Smallest Sums

    多路归并 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> ...

  7. ●POJ 1228 Grandpas Estate

    题链: http://poj.org/problem?id=1228 题解: 计算几何,凸包 题意:给出一些点,求出其凸包,问是否是一个稳定的凸包. 稳定凸包:不能通过新加点使得原来凸包上的点(包括原 ...

  8. windows7安装dlib过程中遇到的问题总结以及运行实例效果

    综合了无数网上记录过这个问题的文章,最后终于安装成功了! 首先有些文章说dlib从19.9版本起开始就不用cmake和boost的支持了,可能是我安装的dlib版本的问题?最后还是通过vs2015 + ...

  9. hdu5646数学构造+二分

    /* 满足n>=(k+1)*k/2的整数n必定满足 a+(a+1)+...+(a+k-1)<=n<=(a+1)+(a+2)+...+(a+k) 只要在[a,a+k]中减掉一个数字ai ...

  10. java登录央行征信网站

    package com.entrym.crawler.test; import java.util.HashMap; import java.util.Map; import org.apache.c ...