1. 程式人生 > >實戰Jmeter壓測Dubbo服務介面 | 併發程式設計網

實戰Jmeter壓測Dubbo服務介面 | 併發程式設計網

一、前言

最近在做一些業務上雲的專案,其中遠端Rpc呼叫方式我們選擇了Dubbo,為便於收集壓測資訊,我們選擇了使用Jmeter來做壓測工具,本文就來簡單介紹如何使用Jmeter壓測Dubbo服務介面,以及需要注意的事情。

二、Jmeter使用

2.1 下載Jmeter

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併發程式設計之美已經出版

加多

加多

高階 Java 攻城獅 at 阿里巴巴加多,目前就職於阿里巴巴,熱衷併發程式設計、ClassLoader,Spring等開源框架,分散式RPC框架dubbo,springcloud等;愛好音樂,運動。微信公眾號:技術原始積累。知識星球賬號:技術原始積累