前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战Jmeter压测Dubbo服务接口

实战Jmeter压测Dubbo服务接口

作者头像
加多
发布2018-12-06 15:33:05
8880
发布2018-12-06 15:33:05
举报
文章被收录于专栏:Java编程技术Java编程技术

一、前言

最近在做一些业务上云的项目,其中远程Rpc调用方式我们选择了Dubbo,为便于收集压测信息,我们选择了使用Jmeter来做压测工具,本文就来简单介绍如何使用Jmeter压测Dubbo服务接口,以及需要注意的事情。

二、Jmeter使用

2.1 下载Jmeter

在 https://jmeter.apache.org/download_jmeter.cgi 下载二进制包

image.png

下载后解压缩后,目录如下:

image.png

2.2 界面模式启动

进入解压目录的bin目录,然后mac下执行 sh jmeter.sh ,如下图:

image.png

然后就会弹出界面:

image.png

2.3 项目中引入Jmeter依赖

代码语言:javascript
复制
    <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_core</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
            <version>3.0</version>
        </dependency>

三、编写Jmeter需要的Dubbo扩展插件

代码语言:javascript
复制
public class ConsumerHelloService extends AbstractJavaSamplerClient {

    private Hello hello = null;

    @Override
    public SampleResult runTest(JavaSamplerContext context) {

        System.out.println("---begin run----");

        SampleResult sr = new SampleResult();

        try {
            sr.sampleStart();

            String result = hello.sayHello(UUID.randomUUID().toString());
            
            sr.setResponseData("from provider:" + result, null);
            sr.setDataType(SampleResult.TEXT);
            sr.setSuccessful(true);
            sr.sampleEnd();
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("---end run----");

        return sr;
    }

    @Override
    public void setupTest(JavaSamplerContext context) {
        System.out.println("---begin setup----");
        try {
            DubboFactory dubboFactory = new DubboFactory();
            dubboFactory.setRegistry("127.0.0.1:2181");
            dubboFactory.setGroup("dubbo");
            dubboFactory.init();
            
            hello = dubboFactory.getReference(Hello.class, "dubbo", null, true, null,
                    null);
        } catch (Exception e) {
            System.out.println(e.getLocalizedMessage());
            throw e;
        }
        System.out.println("---end setup----");
    }
}
  • 如上代码,插件类需要继承AbstractJavaSamplerClient类,并且重写runTest和setupTest这两个方法。
  • setupTest方法会在ConsumerHelloService类实例化后调用一次,用来执行一些初始化操作,这里我们用来完成对服务接口Hello的消费,也就是链接服务提供方,并返回一个Hello的代理类。
  • runTest方法则用来具体调用Hello接口的方法,我们压测也就是频繁的调用runTest来测试hello的sayHello方法。

四、dubbo插件打包与压测

4.1 dubbo插件的安装

首先我们需要把ConsumerHelloService类所在的应用打包为一个jar包,然后把打包好的jar放入到jmeter目录的apache-jmeter/lib/ext:

image.png

然后需要把打成的jar包里面所依赖的包放入到apache-jmeter/lib。 那么如何找jar包依赖的jar那,一个简单的方法是把项目添加springboot的maven插件:

代码语言:javascript
复制
<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.0.2.RELEASE</version>
                <configuration>
                    <executable>false</executable>
                    <excludeDevtools>true</excludeDevtools>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

springboot插件的机制打成的jar结构如下:

image.png

其中lib中会包含所有依赖的jar.

4.2 测试

按照上面讲解的执行sh jmeter.sh启动 界面

然后添加线程组

image.png

然后可以设置压测线程个数等属性

image.png

然后添加Java请求配置组件

image.png

然后在类名称这下拉框中就会存在dubbo插件类,

image.png

然后线程组设置线程个数,并保存:

image.png

到这里说明Jmeter已经找到了我们的dubbo扩展插件,下面我们添加一些监视器以便监控结果

image.png

这里你可以选择你需要的监控页面

最后单击绿色三角 开始压测:

image.png

注意:dubbo服务提供方线程池默认是200个线程,如果你压测时候设置线程个数超过200,则会抛出下面异常:

image.png

这时候你需要修改服务提供方的线程池中线程个数,具体是调用ProtocolConfig类的setThreads方法来设置,或者如果是xml方式,使用下面方式设置:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.10.30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、Jmeter使用
    • 2.1 下载Jmeter
      • 2.2 界面模式启动
        • 2.3 项目中引入Jmeter依赖
        • 三、编写Jmeter需要的Dubbo扩展插件
        • 四、dubbo插件打包与压测
          • 4.1 dubbo插件的安装
            • 4.2 测试
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档