Jmeter模拟RocketMQ生产者消息发送

  • Post author:
  • Post category:其他


实现方案

jmeter 压测工具, 可以支持java请求。

java手写一个rocketmq程序,注意这里需要实现jmeter的JavaSamplerClient

java项目

建议使用maven普通项目 (springboot 测试中发现无法被jmeter识别)

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>jMeterTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.rocketmq.spring.boot</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>1.0.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
            <version>3.1</version>
        </dependency>
    </dependencies>
</project>

RocketMqProducer

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.common.message.Message;

public class RocketMqProducer implements JavaSamplerClient {
    String produceGroup = "ProducerGroupName_1";
    String topic = "diagnosisEqtInfoDataPushT";
    String tag = "ccc";
    String namesrvAddr = "192.168.13.13:9876";
    String message = "{\n" +
            "    \"manufacturerName\": \"ILINECN\",\n" +
            "    \"operateTag\": \"INSERT\",\n" +
            "    \"deviceId\": 11\n" +
            "}";

    @Override
    public void setupTest(JavaSamplerContext arg0) {
        namesrvAddr = arg0.getParameter("namesrvAddr");
        topic = arg0.getParameter( "topic");
        tag = arg0.getParameter( "tag");
        message = arg0.getParameter("message");
        produceGroup = arg0.getParameter("produceGroup");
    }

    @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        SampleResult sr = new SampleResult();
        sr.setSampleLabel("RocketMQ测试");
        try {
            sr.sampleStart();
            DefaultMQProducer producer = new DefaultMQProducer(produceGroup);
            producer.setNamesrvAddr(namesrvAddr);
            producer.setInstanceName("ProducerByCC");
            producer.setVipChannelEnabled(false);

            producer.start();// once
            Message msg = new Message(topic,
                    tag,
                    "WangXiaoRui",
                    message.getBytes());
            try {
                {
                    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(e.getMessage(),"utf-8");
            e.printStackTrace();
        }
        finally {
            sr.sampleEnd();
        }


        return sr;

    }

    @Override
    public void teardownTest(JavaSamplerContext javaSamplerContext) {

    }

    @Override
    public Arguments getDefaultParameters() {
        Arguments args = new Arguments();
        args.addArgument("namesrvAddr", "192.168.13.13:9876");

        args.addArgument("topic", "diagnosisEqtInfoDataPushT");
        args.addArgument("tag", "ccc");
        args.addArgument("message", "{\n" +
                "    \"manufacturerName\": \"ILINECN\",\n" +
                "    \"operateTag\": \"INSERT\",\n" +
                "    \"deviceId\": 11\n" +
                "}");

        args.addArgument("produceGroup", "ProducerGroupName_1");

        return args;
    }
}

jar部署jemter

1. mvn 打包成jar

2. jar放在/lib/ext

3.增加第三方引用包在/lib

关于这些jar哪儿来, 在开发环境本地仓库copy。 或者去外网仓库下载,主要事rocketmq需要的第三方jar

jMeter创建计划-请求

选择java请求

类名称中选择丢进去的jar下的类。

设置参数

参数默认值在项目代码 getDefaultParameters()。可修改后发送。s



版权声明:本文为C343500263原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。