『動善時』JMeter基礎 — 52、使用JMeter測試Dubbo接口


1、Dubbo介紹

(1)Dubbo說明

Dubbo是一個分布式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。

簡單的說:Dubbo一個高性能的,基於 Java 的,開源 RPC 框架。所以嚴格來說,Dubbo不是協議,而是一種分布式服務框架。

(2)Dubbo運行原理

Dubbo架構圖如下所示:

image

節點角色說明:

  • Provider:暴露服務的服務提供方。
  • Consumer:調用遠程服務的服務消費方。
  • Registry:服務注冊與發現的注冊中心。
  • Monitor:統計服務的調用次數和調用時間的監控中心。
  • Container:服務運行的容器。

調用關系說明:

  1. 運行服務的容器負責啟動,加載,運行服務提供者。
  2. 服務提供者在啟動時,向注冊中心注冊自己提供的服務。
  3. 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。
  4. 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基於長連接推送變更數據給消費者。
  5. 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。
  6. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鍾發送一次統計數據到監控中心。

對上圖進行說明:

  • 虛線都是異步訪問,實線都是同步訪問。
  • 紫色虛線:在啟動時完成的功能。
  • 青色虛線(實線):都是程序運行過程中執行的功能。
  • 所有的角色都是可以在單獨的服務器上。

Dubbo簡單的運行原理圖:

image

2、准備測試Dubbo接口的環境

需要下載JMeter的Dubbo依賴JAR包,根據你Dubbo服務的版本,去選擇對應的插件版本。

例如:我的Dubbo是2.3.7版本,我需要的是jmeter-plugins-dubbo-2.7.1-jar-with-dependencies.jar。下載后放到JMeter安裝目錄中的lib/ext路徑下。

各版本下載地址:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo/releases

注意:如果放依賴包之前就已經啟動了JMeter的話,需要重啟JMeter。

之后我就可以使用JMeter中的取樣器元件,來發送支持Dubbo協議的請求。

如下圖所示:

image

說明:

我們在下載Dubbo的JAR包時候,會看到有兩個JAR包:

  • Jmeter-plugins-dubbo-2.7.1-jar-with-dependencies.jar
  • Jmeter-plugins-dubbo-2.7.1.jar

如果使用的是:jmeter-plugins-dubbo-${version}-jar-with-dependencies.jar

此包中已含必要的依賴,推薦使用這個包。

如果使用的是:jmeter-plugins-dubbo-${version}.jar

需要自行添加插件的依賴包,所依賴JAR包的列表如下:

  • dubbo-2.5.3.jar
  • javassist-3.15.0-GA.jar
  • zookeeper-3.4.6.jar
  • zkclient-0.1.jar
  • jline-0.9.94.jar
  • netty-3.7.0-Final.jar
  • slf4j-api-1.7.5.jar
  • log4j-over-slf4j-1.7.5.jar

3、Dubbo Sample界面詳解

Dubbo Sample組件添加方式:選中“線程組”右鍵 —> 添加 —> 取樣器 —> Dubbo Sample

界面如下圖所示:

image

針對界面中各選項說明:

  • 名稱Dubbo Sample組件的自定義名稱,見名知意最好。
  • 注釋:即添加一些備注信息,對該Dubbo Sample組件的簡短說明,以便后期回顧時查看。

(1)Registry Settings:注冊設置

  • Protocol:注冊協議,包括zookeepermulticastRedissimplenone
  • Address:輸入Dubbo注冊地址,注冊中心的IP+Port
    1、當使用zookeeperAddress填入zookeeper地址,集群地址使用","分隔;
    2、當使用Dubbo直連的方式,Address填寫直連地址和服務端口,且注冊協議填none
  • Group:組類型,如果有的話,根據配置填寫即可;
  • Get Provider List:根據Address填寫的地址,獲取服務提供者的服務列表。(直連可以不選,其他都要選)
    1)點擊Get Provider List后,會稍許有點卡。如果輸入的Address填寫不對,會卡死。
    2)根據實際情況選擇Interfaces(接口)和Methods(方法)。

(2)RPC Protocol Settings:RPC協議設置

Protocol:使用的Dubbo協議,包括dubbormihessianwebservicememcachedredis,根據自己的協議類型,選擇對應的選項即可。

(3)Consumer&Service Settings:消費者和提供者設置

  • Timeout:請求接口超時時間,單位ms,根據Dubbo具體配置填寫;
  • Version:版本,Dubbo不同版本之間差異較大,不同版本之間不能互相調用,這里指定Dubbo版本,是為了方便識別和說明;(一般無需填寫)
  • Retries:異常重試次數。類似這種分布式服務通信框架,大多都有重試機制,是為了保證事務成功率;
  • Cluster:集群類型,包括failoverfailfastfailsafefailbackfailking
  • Group:組類型,如果有的話,根據配置填寫即可;
  • Connections:連接數,同上,根據配置填寫;
  • Async:服務處理類型,包括sync(同步)、async(異步),根據配置填寫;(現在都默認選擇sync同步,目前所示樣例都是同步接口)
  • Loadbalance:負載均衡策略,包括random(隨機)、roundrobin(輪詢)、leastactive(最少活躍數)、consistenthash(一致性哈希);

(4)Interface Settings:接口設置

  • Interface:填寫要請求的接口名。因為Dubbo服務大多是開發根據規范自行命名的,因此這里需要填寫完整的接口名+包名;(如果選擇了上面的Get Provider List,則無需填寫,會自動回填)
  • Method:當前接口下的方法名,按照開發提供的API文檔填寫即可;(如果選擇了上面的Get Provider List,則無需填寫,會自動回填)
  • Args:接口參數,根據API文檔填寫,輸入對應的參數類型和參數值即可;
    1)paramType:參數支持任何類型,可以直接使用java.lang下的包裝類,如:intfloatshotdoublelongbytebooleancharString等。
    類型也可以是自定義對象POJO,需使用類的完全名稱。
    2)paramValue:填寫需要的參數值,例如:int為1,booleantrue等,自定義類與List或者Map等使用Json格式數據。

4、Dubbo Sample組件的使用

(1)測試計划內包含的元件

添加元件操作步驟

  1. 創建測試計划。
  2. 創建線程組:選中“測試計划”右鍵 —> 添加 —> 線程(用戶) —> 線程組
  3. 在線程組中,添加取樣器Dubbo Sample組件:選中“線程組”右鍵 —> 添加 —> 取樣器 —> Dubbo Sample
  4. 在線程組中,添加監聽器“察看結果樹”組件:選中“線程組”右鍵 —> 添加 —> 監聽器 —> 察看結果樹

最終測試計划中的元件如下:

image

提示:下面介紹兩種方式,來請求Dubbo 服務。

(2)使用zookeeper協議請求Dubbo接口

1)使用zookeeper協議調用Dubbo服務步驟

  1. 先獲取zookeeper注冊中心的地址,因為Dubbo服務都注冊在這里。
  2. 點擊Get Provider List按鈕,可以獲得提供者的所提供服務的列表。
  3. 選擇要請求的接口與方法。
  4. 填入對應的參數,發送請求。

2)Dubbo接口信息說明

  1. 接口:com.example.provider.service.HelloFroParameterService:1.0.0
  2. 方法名:sayHelloFroParameter
  3. 參數類型:String,如果是自定義對象,填寫對象的全名。
  4. 參數值:字符串就行。

填寫好的Dubbo Sample請求內容,如下圖所示:

image

提示:其他選項我們暫時不用填寫。

3)補充說明

當點擊Get Provider List按鈕之后,會出現如下提示信息:

image

意思是:獲取所有提供者的服務列表,可能會導致 JMeter 停止響應幾秒鍾。 你要繼續嗎?

我們點擊是即可。

然后停頓一會,會出現如下提示:

image

意思是:提示你,獲取提供者列表以完成! 檢查日志是否有錯誤。

這就證明我們獲得提供者列表成功了。

提示:

如果10秒中都沒有出現如上彈框,證明列表獲取失敗,可能是zookeeper地址填寫錯誤,也可以能是服務有問題了。

而此時JMeter界面是卡死狀態,我們就需要強制關閉掉JMeter了,因為等再長時間也沒有意義了。

獲取到提供者列表后,在InterfacesMethods的下拉列表中就有內容了,我們可以選擇需要調用的接口和方法。

同時選擇好的接口和方法,會同步到下面Interface Settings中的接口和方法的設置中。

如下圖所示:

image

4)運行查看結果

運行腳本,查看結果。

我們可以看到,成功請求了Dubbo接口,並接收到了返回的數據。

如下圖所示:

image

(3)使用直連的方式請求Dubbo接口

直連方式與zookeeper連接方式不同,不需要到注冊中心去分配一個提供者來提供服務,我們是直接鏈接某個提供者,去進行請求。

1)使用直連方式調用Dubbo服務步驟

  1. Protocol協議選擇none
  2. Dubbo接口填寫直連地址:如:127.0.0.1:20880
  3. 填寫接口地址:com.example.provider.service.HelloService:1.0.0
  4. 填寫調用的方法名:sayHello
  5. 請求一個不帶參數的Dubbo接口,所以不需要填寫參數。

編輯完成,如下圖所示:

image

2)運行查看結果

我們可以看到,成功請求了Dubbo接口,並接收到了返回的數據。

如下圖所示:

image

以上就完成了JMeter對Dubbo接口的訪問。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM