實戰Jmeter壓測Dubbo服務介面 | 併發程式設計網
阿新 • • 發佈:2018-12-18
一、前言
最近在做一些業務上雲的專案,其中遠端Rpc呼叫方式我們選擇了Dubbo,為便於收集壓測資訊,我們選擇了使用Jmeter來做壓測工具,本文就來簡單介紹如何使用Jmeter壓測Dubbo服務介面,以及需要注意的事情。
二、Jmeter使用
2.1 下載Jmeter
image.png下載後解壓縮後,目錄如下:
image.png2.2 介面模式啟動
進入解壓目錄的bin目錄,然後mac下執行 sh jmeter.sh ,如下圖:
image.png然後就會彈出介面:
image.png2.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