实战Jmeter压测Dubbo服务接口

一、前言

最近在做一些业务上云的项目,其中远程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依赖

	<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扩展插件

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插件:

<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方式,使用下面方式设置:
image.png

最后、Java并发编程之美已经出版

京东链接: https://item.jd.com/12450812.html
天猫链接:https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.61.59a73c85cVE3Sk&id=579705310959&user_id=1932014659&cat_id=2&is_b=1&rn=8030c6abc3a06ef8b8e63bc1badcbbb2

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
JMeter是一款开源的性能测试工具,可以用于对Web应用程序、接口服务器进行压力测试。在JMeter中,可以通过组合多个接口来进行压测。 下面是一种常见的JMeter压测组合接口的方式: 1. 创建线程组:在JMeter中,首先需要创建一个线程组,用于模拟并发用户。可以设置线程数、循环次数等参数。 2. 添加HTTP请求:在线程组下添加HTTP请求,默认情况下,JMeter会发送一个HTTP GET请求。可以根据需要修改请求方法、URL、参数等。 3. 添加断言:可以在HTTP请求后添加断言,用于验证接口返回结果是否符合预期。常见的断言类型包括响应代码、响应消息、响应时间等。 4. 添加参数化:如果需要对接口进行参数化测试,可以使用JMeter提供的参数化功能。可以通过CSV文件、数据库等方式提供参数数据。 5. 添加监听器:可以添加监听器来收集和分析测试结果。常见的监听器包括查看结果树、聚合报告、图形结果等。 6. 添加逻辑控制器:如果需要对接口进行复杂的逻辑控制,可以使用JMeter提供的逻辑控制器。例如,循环控制器、条件控制器等。 7. 添加定时器:可以添加定时器来模拟用户的访问间隔。常见的定时器包括固定定时器、随机定时器等。 8. 运行测试计划:配置完成后,可以运行整个测试计划,JMeter会模拟并发用户发送请求,并收集测试结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值