1、Dubbo介紹
(1)Dubbo說明
Dubbo是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案。
簡單的說:Dubbo一個高效能的,基於 Java 的,開源 RPC 框架。所以嚴格來說,Dubbo不是協議,而是一種分散式服務框架。
(2)Dubbo執行原理
Dubbo架構圖如下所示:
節點角色說明:
Provider
:暴露服務的服務提供方。Consumer
:呼叫遠端服務的服務消費方。Registry
:服務註冊與發現的註冊中心。Monitor
:統計服務的呼叫次數和呼叫時間的監控中心。Container
:服務執行的容器。
呼叫關係說明:
- 執行服務的容器負責啟動,載入,執行服務提供者。
- 服務提供者在啟動時,向註冊中心註冊自己提供的服務。
- 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。
- 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。
- 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫。
- 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。
對上圖進行說明:
- 虛線都是非同步訪問,實線都是同步訪問。
- 紫色虛線:在啟動時完成的功能。
- 青色虛線(實線):都是程式執行過程中執行的功能。
- 所有的角色都是可以在單獨的伺服器上。
Dubbo簡單的執行原理圖:
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協議的請求。
如下圖所示:
說明:
我們在下載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
。
介面如下圖所示:
針對介面中各選項說明:
- 名稱:
Dubbo Sample
元件的自定義名稱,見名知意最好。 - 註釋:即新增一些備註資訊,對該
Dubbo Sample
元件的簡短說明,以便後期回顧時檢視。
(1)Registry Settings:註冊設定
Protocol
:註冊協議,包括zookeeper
、multicast
、Redis
、simple
、none
;Address
:輸入Dubbo註冊地址,註冊中心的IP+Port
:
1、當使用zookeeper
,Address
填入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協議,包括dubbo
、rmi
、hessian
、webservice
、memcached
、redis
,根據自己的協議型別,選擇對應的選項即可。
(3)Consumer&Service Settings:消費者和提供者設定
Timeout
:請求介面超時時間,單位ms,根據Dubbo具體配置填寫;Version
:版本,Dubbo不同版本之間差異較大,不同版本之間不能互相呼叫,這裡指定Dubbo版本,是為了方便識別和說明;(一般無需填寫)Retries
:異常重試次數。類似這種分散式服務通訊框架,大多都有重試機制,是為了保證事務成功率;Cluster
:叢集型別,包括failover
、failfast
、failsafe
、failback
、failking
;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
下的包裝類,如:int
、float
、shot
、double
、long
、byte
、boolean
、char
、String
等。
型別也可以是自定義物件POJO,需使用類的完全名稱。
2)paramValue
:填寫需要的引數值,例如:int
為1,boolean
為true
等,自定義類與List
或者Map
等使用Json格式資料。
4、Dubbo Sample元件的使用
(1)測試計劃內包含的元件
新增元件操作步驟:
- 建立測試計劃。
- 建立執行緒組:
選中“測試計劃”右鍵 —> 新增 —> 執行緒(使用者) —> 執行緒組
。 - 線上程組中,新增取樣器
Dubbo Sample
元件:選中“執行緒組”右鍵 —> 新增 —> 取樣器 —> Dubbo Sample
。 - 線上程組中,新增監聽器“察看結果樹”元件:
選中“執行緒組”右鍵 —> 新增 —> 監聽器 —> 察看結果樹
。
最終測試計劃中的元件如下:
提示:下面介紹兩種方式,來請求Dubbo 服務。
(2)使用zookeeper協議請求Dubbo介面
1)使用zookeeper協議呼叫Dubbo服務步驟:
- 先獲取zookeeper註冊中心的地址,因為Dubbo服務都註冊在這裡。
- 點選
Get Provider List
按鈕,可以獲得提供者的所提供服務的列表。 - 選擇要請求的介面與方法。
- 填入對應的引數,傳送請求。
2)Dubbo介面資訊說明:
- 介面:
com.example.provider.service.HelloFroParameterService:1.0.0
- 方法名:
sayHelloFroParameter
- 引數型別:
String
,如果是自定義物件,填寫物件的全名。 - 引數值:字串就行。
填寫好的Dubbo Sample請求內容,如下圖所示:
提示:其他選項我們暫時不用填寫。
3)補充說明:
當點選Get Provider List
按鈕之後,會出現如下提示資訊:
意思是:獲取所有提供者的服務列表,可能會導致 JMeter 停止響應幾秒鐘。 你要繼續嗎?
我們點選是即可。
然後停頓一會,會出現如下提示:
意思是:提示你,獲取提供者列表以完成! 檢查日誌是否有錯誤。
這就證明我們獲得提供者列表成功了。
提示:
如果10秒中都沒有出現如上彈框,證明列表獲取失敗,可能是zookeeper地址填寫錯誤,也可以能是服務有問題了。
而此時JMeter介面是卡死狀態,我們就需要強制關閉掉JMeter了,因為等再長時間也沒有意義了。
獲取到提供者列表後,在Interfaces
和Methods
的下拉選單中就有內容了,我們可以選擇需要呼叫的介面和方法。
同時選擇好的介面和方法,會同步到下面Interface Settings
中的介面和方法的設定中。
如下圖所示:
4)執行檢視結果
執行指令碼,檢視結果。
我們可以看到,成功請求了Dubbo介面,並接收到了返回的資料。
如下圖所示:
(3)使用直連的方式請求Dubbo介面
直連方式與zookeeper連線方式不同,不需要到註冊中心去分配一個提供者來提供服務,我們是直接連結某個提供者,去進行請求。
1)使用直連方式呼叫Dubbo服務步驟:
- Protocol協議選擇
none
。 - Dubbo介面填寫直連地址:如:
127.0.0.1:20880
。 - 填寫介面地址:
com.example.provider.service.HelloService:1.0.0
- 填寫呼叫的方法名:
sayHello
。 - 請求一個不帶引數的Dubbo介面,所以不需要填寫引數。
編輯完成,如下圖所示:
2)執行檢視結果
我們可以看到,成功請求了Dubbo介面,並接收到了返回的資料。
如下圖所示:
以上就完成了JMeter對Dubbo介面的訪問。