博客轉載:http://www.iocoder.cn/Dubbo/Admin/
摘要: 原創出處 http://www.iocoder.cn/Dubbo/Admin/ 「芋道源碼」歡迎轉載,保留摘要,謝謝!
1. 概述
Dubbo Admin 是 Dubbo 的管理控制台,主要三部分功能:
- 服務查詢
- 服務治理(包括 Dubbo 2.7 版本新增的治理規則)
- 服務測試
Dubbo Admin 采用前端后分離的方式開發:
- 前端使用 Vue.js 作為 Javascript框架,Vuetify 作為 UI 框架。
- 后端使用 Spring Boot 框架。
既可以按照標准的 Maven 方式進行打包與部署,也可以采用前后端分離的部署方式,方便開發。
2. 快速入門
本小節,我們來部署一個 Dubbo Admin 控制台,並對 Dubbo 服務進行管理。
友情提示:如果胖友想要使用 Docker 部署 Dubbo Admin 控制台,可以看看 https://hub.docker.com/r/apache/dubbo-admin
2.1 部署 Dubbo Admin
因為 Dubbo Admin 並未提供已經編譯好的 jar
包,所以我們需要自己動手。
① 執行 git clone https://github.com/apache/dubbo-admin.git
命令,將項目下載到本地。
友情提示:如果網絡比較“差”,可能需要一些時間哈。
② 修改 dubbo-admin-server/src/main/resources/application.properties
配置文件,主要是指定配置中心。內容如下:
# Dubbo 各種中心的配置 |
這里我們使用本地的 ZooKeeper 做為注冊中心,所以無需更改。如果胖友使用遠程的 ZooKeeper 服務,需要修改如下三個配置項:
admin.registry.address
,注冊中心地址。admin.config-center
,配置中心地址。admin.metadata-report.address
,元數據中心地址。
友情提示:建議胖友參考《芋道 ZooKeeper 極簡入門》文章,安裝一個本地的 ZooKeeper 服務,和本文更加搭配。
另外,考慮到安全性,建議修改 admin.root.user.name
和 admin.root.user.password
配置項,設置成自己想要的管理員賬號與密碼。
③ 執行 mvn clean package -Dmaven.test.skip=true
命令,開始構建 Dubbo Admin 項目。
友情提示:如果網絡比較“差”,可能需要一些時間哈。
另外,添加
-Dmaven.test.skip=true
參數的原因是,貌似當前版本單元測試有點問題,老報連接不上 ZooKeeper 服務。
④ 執行如下命令,啟動 Dubbo Admin 控制台。
# 進入構建輸出目錄 |
⑤ 使用瀏覽器,訪問 http://127.0.0.1:8080/#/login 地址,進入 Dubbo Admin 登錄界面。如下圖所示:
使用默認的「root/root」賬號密碼進行登錄。登錄成功后,進入 Dubbo Admin 首頁。如下圖所示:
2.2 啟動 Dubbo 服務
在《芋道 Spring Boot Dubbo 入門》的「3. 注解配置」小節,我們搭建了一個 Dubbo 示例項目 lab-30-dubbo-annotations-demo
。如下圖所示:
下面,我們使用 Dubbo Admin 將該 Dubbo 示例項目進行管理。
① 執行 ProviderApplication 啟動服務提供者,執行 ConsumerApplication 啟動服務消費者。
② 點擊 Dubbo Admin 的「服務查詢」菜單,可以查看到 UserRpcService 服務。如下圖所示:
點擊 UserRpcService 的「詳情」按鈕,可以看到 UserRpcService 服務的基礎信息、服務信息(提供者 + 消費者列表)、元數據。如下圖所示:
③ 點擊 Dubbo Admin 的「服務統計 -> 服務關系」菜單,可以看到服務之間的調用關系。如下圖所示:
④ 點擊 Dubbo Admin 的「服務統計 -> 服務統計」菜單,可以看 QPS、Response Time 等等統計信息。如下圖所示:
= = 不過艿艿測試總是在報錯,所以這里就暫時不演示了。
3. Swagger 支持
Dubbo Admin 提供的 RESTful API 集成了 Swagger 組件,所以可以很方便的自動生成 API 文檔。訪問 http://127.0.0.1:8080/swagger-ui.html 地址,獲得 Swagger 文檔如下圖所示:
4. 服務測試
在 Dubbo 2.7 版本開始提供服務的元數據,所以 Dubbo Admin 就可以用通過 Dubbo 泛化調用的特性,實現在控制台中,調用服務提供者進行測試。如下圖所示:
下面,我們來詳細介紹服務測試的使用過程。
4.1 接入元數據中心
使用服務測試的前提,是服務提供者需要接入元數據中心。以 user-rpc-service-provider-02
項目舉例子,需要添加 dubbo.metadata-report.address
配置項。如下圖所示:
這里,我們還是采用 ZooKeeper 作為元數據中心。
修改完成后,重新執行 ProviderApplication 重啟服務提供者。
4.2 使用流程
① 打開 Dubbo Admin 的「服務測試」菜單,輸入服務名進行搜索。如下圖所示:
② 點擊 #get(...)
方法后面的「編輯」圖標,進入該方法的測試界面。如下圖所示:
③ 填寫參數,點擊「執行」按鈕,進行一次服務提供者的調用。如下圖所示:
4.3 實現原理
胖友可以閱讀《Dubbo Admin 服務測試功能》文章,進一步了解。
5. 服務 Mock
暫未開發,還在計划中...
6. 服務治理
友情提示:如下內容,基於《Dubbo 文檔 —— 服務治理和配置管理》做改造。
可以快速閱讀,在有需要的時候,認真查看。
服務治理主要作用,是改變運行時服務的行為和選址邏輯,達到限流,權重配置等目的。主要有以下幾個功能:
6.1 應用級別的服務治理
在 Dubbo 2.6 及更早版本中,所有的服務治理規則都只針對服務粒度,如果要把某條規則作用到應用粒度上,需要為應用下的所有服務配合相同的規則、變更、刪除的時候,也需要對應的操作,這樣的操作很不友好。
因此 Dubbo 2.7 版本中增加了應用粒度的服務治理操作,對於條件路由(包括黑白名單)、動態配置(包括權重,負載均衡)都可以做應用級別的配置:
上圖是條件路由的配置,可以按照應用名、服務名兩個維度來填寫,也可以按照這兩個維度來查詢。
6.2 標簽路由
標簽路由是 Dubbo2.7 引入的新功能,配置以應用作為維度,給不同的服務器打上不同名字的標簽,配置如下圖所示:
調用的時候,客戶端可以通過 setAttachment
的方式,來設置不同的標簽名稱。比如本例中,setAttachment(tag1)
,客戶端的選址范圍就在如圖所示的三台機器中,可以通過這種方式來實現流量隔離,灰度發布等功能。
6.3 條件路由
條件路由是 Dubbo 一直以來就有的功能,目前可以配置服務和應用兩個維度,條件路由為 yaml
格式,具體的規則體以及各種適用場景,請參考這里
6.4 黑白名單
黑白名單是條件路由的一部分,規則存儲和條件路由放在一起,為了方便配置所以單獨拿出來,同樣可以通過服務和應用兩個維度,指定黑名單和白名單:
6.5 動態配置
動態配置是和路由規則平行的另一類服務治理治理功能,主要作用是在不重啟服務的情況下,動態改變調用行為,從 Dubbo2.7 版本開始,支持服務和應用兩個維度的配置,采用yaml
格式,界面如下:具體的規則體說明請參考這里
6.6 權重調節
權重調節是動態配置的子功能,主要作用是改變服務端的權重,更大的權重會有更大的幾率被客戶端選中作為服務提供者,從而達到流量分配的目的:
6.7 負載均衡
負載均衡也是動態配置的子功能,主要作用是調整客戶端的選址邏輯,目前可選的負載均衡策略有隨機,輪訓和最小活躍,關於各個策略的解釋請參考這里。
7. 配置管理
友情提示:如下內容,基於《Dubbo 文檔 —— 服務治理和配置管理》做改造。
可以快速閱讀,在有需要的時候,認真查看。
配置管理也是配合 Dubbo 2.7 新增的功能。在 Dubbo 2.7 中,增加了全局和應用維度的配置,分別在全局和應用范圍內生效。其中,應用配置也可以指定該應用中的服務級別的配置,可以在控制台中查看,修改配置規則,默認展示全局維度的配置。
7.1 全局配置
全局配置里可以指定注冊中心、元數據中心的地址,服務端和客戶端的超時時間等,這些配置在全局內生效。除了配置寫入,也可以用來查看。
如果使用 ZooKeeper 作為注冊中心和元數據中心,還可以看到配置文件所在位置的目錄結構。
7.2 應用、服務配置
應用級別的配置可以為應用或者應用內的服務指定配置。在服務維度上,需要區分提供者和消費者。
dubbo.reference.{serviceName}
表示作為該服務消費者的配置dubbo.provider.{servcieName}
表示作為該服務提供者的配置。
其中注冊中心和元數據中心的地址,只能在全局配置中指定,這也是 Dubbo 2.7 中推薦的使用方式。
並且,優先級:服務配置 > 應用配置 > 全局配置。
666. 彩蛋
暫無彩蛋,用就完事了!