日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一文教你 Dubbo 服务性能压测(with JMeter)

發(fā)布時間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一文教你 Dubbo 服务性能压测(with JMeter) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??點(diǎn)擊上方?好好學(xué)java?,選擇?星標(biāo)?公眾號

重磅資訊、干貨,第一時間送達(dá) 今日推薦:為什么魂斗羅只有 128 KB卻可以實(shí)現(xiàn)那么長的劇情?個人原創(chuàng)+1博客:點(diǎn)擊前往,查看更多 原文地址:https://ricstudio.top/archives/dubbo-benchmark-jmeter 轉(zhuǎn)載請注明出處!

前言

最近在做Dubbo服務(wù)與Prometheus的監(jiān)控集成,為了測試監(jiān)控組件對Dubbo RPC 調(diào)用的性能影響,就需要對添加前后做性能測試。雖然之前給組內(nèi)搭建了統(tǒng)一的Dubbo 服務(wù)測試平臺,但是無法用于性能測試。

說起性能測試,大家可能會有很多選擇,wrk、JMeter等等。但是相信大家一般都是用于測試HTTP接口,對于這種Dubbo框架的這種私有協(xié)議dubbo://,這些工具沒有提供原生的支持。第一個想法就是通過Dubbo 的泛化調(diào)用來自己寫一個客戶端,然后統(tǒng)計測試結(jié)果,但是這樣一是不優(yōu)雅,二是有可能重復(fù)造輪子,浪費(fèi)時間。經(jīng)過一番google之后,果然得到了想要的答案。

今天要介紹的,就是一款來自于Dubbo 社區(qū)的JMeter 插件jmeter-plugins-for-apache-dubbo,使用這款插件,就可以讓JMeter 對Dubbo 服務(wù)的測試。

本文假定讀者使用JMeter 進(jìn)行過簡單的性能測試,并且安裝了JMeter

正文

Step 1:安裝Dubbo 插件

  • 克隆項目:git clone https://github.com/thubbo/jmeter-plugins-for-apache-dubbo.git

  • 打包項目,構(gòu)建 JMeter 插件:mvn clean install

    或者你可以直接跳過上面兩步,下載 jmeter-plugins-dubbo-2.7.3-jar-with-dependencies.jar

  • 將插件添加到 ${JMETER_HOME}\lib\ext(安裝完之后重啟jmeter)

  • image.png

    Step 2:編寫JMeter 腳本

    1、創(chuàng)建Dubbo Sample

    【測試計劃】 區(qū)域右鍵單擊 【線程組】,并選擇 【添加】 > 【取樣器】 > Dubbo Sample

    image.png

    Dubbo Sample 對話框中配置注冊中心地址、服務(wù)接口名(Java interface 類名)、方法名、參數(shù)類型和參數(shù)值等信息。

    配置步驟如下:

    • 配置注冊中心,通常使用 ZooKeeper。(配置完成之后,點(diǎn)擊上面Get Provider List 按鈕獲取注冊的服務(wù)列表)

      • Protocol 選擇為 zookeeper,則 Address 填寫 ZooKeeper 地址。

      • 若生產(chǎn)環(huán)境通常包含多個 ZooKeeper 節(jié)點(diǎn),可填寫多個 ZooKeeper 地址并用英文逗號(,)隔開。

      • 若針對單臺服務(wù)器進(jìn)行測試,則將 Protocol 選擇 none,Address 填寫 Dubbo 服務(wù)地址。

    • 按需調(diào)整服務(wù)調(diào)用配置,如分組 Group、版本 Version、調(diào)用超時時間 Timeout(默認(rèn)為 1 秒)等。

    • 配置 Dubbo 服務(wù)的完整 Java 接口類名和方法名。

    • 配置每個參數(shù)的參數(shù)類型和參數(shù)值。

      • 參數(shù)類型:基本類型(如 boolean, int 等)直接寫類型名,其他類型寫完整 Java 類名(注意哦,是完整類名)。

      • 參數(shù)值:基本類型和字符串直接寫參數(shù)值,復(fù)雜類型用 JSON 表示填寫。

    image.png

    為了方便本地調(diào)試測試腳本,可以添加結(jié)構(gòu)監(jiān)聽器,右鍵單擊 【線程組】,選擇 【添加】 > 【監(jiān)聽器】> 【察看結(jié)果樹】,添加 察看結(jié)果樹 監(jiān)聽器。

    Step 3:測試執(zhí)行

    在**【線程組】上右擊,點(diǎn)擊【驗證】**,執(zhí)行單次請求,來測試工具與服務(wù)的聯(lián)通性。

    在**【察看結(jié)果樹】選項卡中可以看到【響應(yīng)數(shù)據(jù)】**返回如預(yù)期,說明可以正常執(zhí)行 Dubbo 調(diào)用了。

    image.png

    Step 4:添加斷言

    有時候你會看到執(zhí)行結(jié)果顯示成功,但是實(shí)際上Dubbo 服務(wù)調(diào)用失敗了,或者業(yè)務(wù)處理失敗,返回結(jié)果中包含了錯誤碼。比如下面兩張圖。

    RPC 調(diào)用失敗。

    image.png

    業(yè)務(wù)處理失敗。

    image.png

    解決方法:

    針對此類問題,可以添加斷言來檢查服務(wù)是否成功。泛化調(diào)用的結(jié)果以 JSON 形式返回,可以添加斷言檢查返回的 JSON 數(shù)據(jù),以更準(zhǔn)確的校驗服務(wù)執(zhí)行是否成功。

    具體步驟就是,在 jmeter的 【測試計劃】 區(qū)域右鍵單擊 Dubbo Sample,并選擇 【添加】 > 【斷言】 > 【JSR233 Assertion】。

    image.png

    這里我給出我的groovy 測試腳本代碼:

    String respStr = null; Map<String, Object> resp = null; try {respStr = SampleResult.getResponseDataAsString();resp = (Map<String, Object>) com.alibaba.fastjson.JSON.parse(respStr); } catch (Throwable ex) {// passlog.error("error", ex); } if (resp == null) {AssertionResult.setFailure(true);AssertionResult.setFailureMessage("RESPONSE IS NOT JSON: " + respStr); } else {// 簡單檢查: dubbo 泛化調(diào)用失敗時, 返回 JSON 包含 code 和 detailMessage 字段.if (resp.get("code") != null && resp.get("detailMessage")) {AssertionResult.setFailure(true);AssertionResult.setFailureMessage("rpc exception, code=" + resp.get("code") + " detailMessage=" + resp.get("detailMessage"));} else if(!"SUCCESS".equals((String)resp.get("code"))) {// TODO 根據(jù)你自己的實(shí)際業(yè)務(wù),校驗請求是否成功.AssertionResult.setFailure(true);AssertionResult.setFailureMessage("請求失敗, code=" + resp.get("code"));} else {AssertionResult.setFailure(false);} } image.png

    讓我們看看,添加了斷言之后,再驗證的結(jié)果。

    image.png

    可以看到,斷言起到了業(yè)務(wù)校驗的作用,并且提示了報錯信息。

    至于如何編寫腳本的其他部分,就要考慮你要模擬的場景來設(shè)置了,屬于如何使用JMeter的部分,所以這里就不過多敘述。

    更多常見問題

    關(guān)于該插件的更多常見問題,請參考該插件的github wiki中的FAQ。

    參考

    • jmeter-plugins-for-apache-dubbo)

    總結(jié)

    以上是生活随笔為你收集整理的一文教你 Dubbo 服务性能压测(with JMeter)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。