RocketMQ集群压测实战一:扩展JMeter
来源:互联网 发布:视频无损分割软件 编辑:程序博客网 时间:2024/04/28 02:49
测试工具:最新版JMeter 3.1
RocketMQ:1m单点或2m-2s-async集群
版本apache-rocketmq 4.0.0-incubating(参考 点击打开链接)
JDK:Java7+
纯粹生产者TPS压测
public class Producter extends AbstractJavaSamplerClient{ public SampleResult runTest(JavaSamplerContext javaSamplerContext) { SampleResult sr = new SampleResult(); sr.setSampleLabel("RocketMQ测试"); try { sr.sampleStart(); DefaultMQProducer producer = new DefaultMQProducer(MixUtil.createGroupName("ProducerGroupName_")); producer.setNamesrvAddr(MixUtil.NAME_SRV_ADDR); producer.setInstanceName("Producer"); producer.setVipChannelEnabled(false); producer.start();// once int times = 1000; for(int i=0;i<times;++i){ try { { Message msg = new Message("WangXiaoRuiTopic", "TagA", "WangXiaoRui", ("王小瑞,花名誓嘉,阿里巴巴中间件消息团队负责人,具有丰富的高可用,高可靠分布式系统构建经验,主导了阿里巴巴多次双十一消息引擎的改进优化项目,拥有多项分布式领域的专利。Apache RocketMQ联合创始人").getBytes()); SendResult sendResult = producer.send(msg); if(sendResult ==null || sendResult.getSendStatus() != SendStatus.SEND_OK){ System.err.println(sendResult); } } { Message msg = new Message("FengJiaTopic", "TagB", "FengJia", ("冯嘉,花名鼬神,阿里巴巴中间件架构师,具有丰富的分布式软件架构、高并发网站设计、性能调优经验,拥有多项分布式领域的专利。开源爱好者,专注分布式、大数据领域,关注Hbase/Hadoop/Spark/Flink等大数据技术栈。目前负责阿里消息中间件生态输出、云上商业化,Apache RocketMQ联合创始人。联系方式: vongosling@apache.org").getBytes()); SendResult sendResult = producer.send(msg); if(sendResult ==null || sendResult.getSendStatus() != SendStatus.SEND_OK){ System.err.println(sendResult); } } { Message msg = new Message("RocketMQHostTopic", "TagC", "RocketMQHist", ("第三代,以拉模式为主,兼有推模式的高性能、低延迟消息引擎RocketMQ,在二代功能特性的基础上,为电商金融领域添加了可靠重试、基于文件存储的分布式事务等特性,并做了大量优化。从2012年开始,经历了历次双11核心交易链路检验。目前已经捐赠给Apache基金会。时至今日,RocketMQ很好的服务了阿里集团大大小小上千个应用,在双11当天,更有不可思议的万亿级消息流转,为集团大中台的稳定发挥了举足轻重的作用").getBytes()); SendResult sendResult = producer.send(msg); if(sendResult ==null || sendResult.getSendStatus() != SendStatus.SEND_OK){ System.err.println(sendResult); } } }catch (Exception e){ e.printStackTrace();; } } producer.shutdown(); sr.setResponseData("success","utf-8"); sr.setDataType(SampleResult.TEXT); sr.setSuccessful(true); }catch(Exception e){ sr.setSuccessful(false); sr.setResponseData(MixUtil.getStackTrace(e),"utf-8"); e.printStackTrace(); } finally { sr.sampleEnd(); } return sr; }...
没有纯粹的消费者TPS压测例子。。生产和消费混合TPS压测
package cn.treebear.rocketmq.tester;import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;import org.apache.jmeter.samplers.SampleResult;import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;import org.apache.rocketmq.common.message.MessageExt;import java.util.List;import java.util.concurrent.TimeUnit;/** * Created by zhujl on 2017/4/13. */public class Consumer extends AbstractJavaSamplerClient { public SampleResult runTest(JavaSamplerContext javaSamplerContext) { SampleResult sr = new SampleResult(); sr.setSampleLabel("RocketMQ消费者测试"); try { sr.sampleStart(); DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(MixUtil.createGroupName("ConsumerGroupname_")); consumer.setNamesrvAddr(MixUtil.NAME_SRV_ADDR); consumer.setInstanceName("Consumer"); consumer.subscribe("WangXiaoRuiTopic", "TagA || TagC || TagD"); consumer.subscribe("FengJiaTopic", "*"); consumer.registerMessageListener(new OutMessageListener()); consumer.start(); System.out.println("Consumer Started."); TimeUnit.MILLISECONDS.sleep(10 * 1000); consumer.shutdown(); sr.setResponseData("success","utf-8"); sr.setDataType(SampleResult.TEXT); sr.setSuccessful(true); }catch (Exception e){ sr.setSuccessful(false); sr.setResponseData(MixUtil.getStackTrace(e),"utf-8"); e.printStackTrace(); }finally { sr.sampleEnd(); } return sr; }}
package cn.treebear.rocketmq.tester;import java.io.PrintWriter;import java.io.StringWriter;import java.io.Writer;import java.lang.management.ManagementFactory;import java.lang.management.RuntimeMXBean;import java.net.InetAddress;import java.net.NetworkInterface;import java.util.Enumeration;/** * Created by zhujl on 2017/4/13. */public class MixUtil { public final static String NAME_SRV_ADDR = "namesrv1:9876;namesrv2:9876"; public static String getStackTrace(Throwable aThrowable) { final Writer result = new StringWriter(); final PrintWriter printWriter = new PrintWriter(result); aThrowable.printStackTrace(printWriter); return result.toString(); } public static String getIpAddr(){ String ip=""; try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { NetworkInterface intf = en.nextElement(); String name = intf.getName(); if (!name.contains("docker") && !name.contains("lo")) { for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) { //获得IP InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { String ipaddress = inetAddress.getHostAddress().toString(); if (!ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) { System.out.println(ipaddress); if (!"127.0.0.1".equals(ip)) { ip = ipaddress; } } } } } } }catch (Exception e){ e.printStackTrace(); } return ip; } public static final int getProcessID() { RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); System.out.println(runtimeMXBean.getName()); return Integer.valueOf(runtimeMXBean.getName().split("@")[0]) .intValue(); } public static String createGroupName(String groupPrefix){ return groupPrefix +"_" + getIpAddr().replaceAll("\\.","_") + "_"+getProcessID()+"_"+Thread.currentThread().getId(); } public static void main(String[] args){ System.out.println(MixUtil.createGroupName("ProducerGroupName_")); }}package cn.treebear.rocketmq.tester;import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;import org.apache.rocketmq.common.message.MessageExt;import java.util.List;/** * Created by zhujl on 2017/4/17. * */public class OutMessageListener implements MessageListenerConcurrently { /** * 默认msgs里只有一条消息,可以通过设置consumeMessageBatchMaxSize参数来批量接收消息 */ @Override public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext consumeConcurrentlyContext) { System.out.println(Thread.currentThread().getName() + " Receive new Message:" + msgs.size()); MessageExt msg = msgs.get(0); if (msg.getTopic().equals("WangXiaoRuiTopic")) { if (msg.getTags() != null && msg.getTags().equals("TagA")) { System.out.println("do with TagA,msg:" + msg); } else if (msg.getTags() != null && msg.getTags().equals("TagC")) { System.out.println("do with TagC,msg:" + msg); } else if (msg.getTags() != null && msg.getTags().equals("TagC")) { System.out.println("do with TagC,msg:" + msg); } } else if (msg.getTopic().equals("TopicTest2")) { System.out.println(new String(msg.getBody())); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; }}
将源码打为jar包与其它依赖的包一起拷贝到jmeter扩展目录
新建执行计划,添加java请求节点,选择生产者或者消费者
0 0
- RocketMQ集群压测实战一:扩展JMeter
- RocketMQ集群压测实战二:压测过程
- RocketMQ实战(一)
- RocketMQ实战 (一)
- RocketMQ实战(一)
- RocketMQ实战(一)
- RocketMQ实战(一)
- RocketMQ实战(一)
- RocketMQ实战(一)
- jmeter集群压测搭建
- RocketMQ集群配置笔记(一)
- RocketMQ集群
- RocketMq集群环境实战(双namesrv、双master、双slave)
- rocketmq jmeter压测
- RocketMQ集群配置
- RocketMQ集群配置
- RocketMQ集群配置 / localtransactionexecuter
- RocketMQ集群配置
- 从Object和Function说说JS的原型链
- Grails框架优劣势分析及同类比较
- 初入qualcomm平台usb驱动(一)
- 从菜鸟到架构师(二十三)
- Http Token
- RocketMQ集群压测实战一:扩展JMeter
- 三.设计模式-代理模式
- Find Peak Element
- 手机卫士day13
- 2017中国大数据应用大会:“大数据、大智能”
- perl 安装Rex
- iis7 设置自定义错误页没有生效的解决方法
- view的三种测量模式的理解
- 二维指针的几个常见写法的区别,与空间的动态开辟讲解