
框架介紹
1.1.1 概述
Dubbo是阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實作服務的輸出和輸入功能,可以和 Spring框架無縫集成,
Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向介面的遠程方法呼叫,智能容錯和負載均衡,以及服務自動注冊和發現,
1.1.2 運行架構
dubbo運行架構如下圖示

節點角色說明
| 節點 | 角色說明 |
|---|---|
Provider |
暴露服務的服務提供方 |
Consumer |
呼叫遠程服務的服務消費方 |
Registry |
服務注冊與發現的注冊中心 |
Monitor |
統計服務的呼叫次數和呼叫時間的監控中心 |
Container |
服務運行容器 |
呼叫關系說明
- 服務容器負責啟動,加載,運行服務提供者,
- 服務提供者在啟動時,向注冊中心注冊自己提供的服務,
- 服務消費者在啟動時,向注冊中心訂閱自己所需的服務,
- 注冊中心回傳服務提供者地址串列給消費者,如果有變更,注冊中心將基于長連接推送變更資料給消費者,
- 服務消費者,從提供者地址串列中,基于軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫,
- 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘發送一次統計資料到監控中心,
關于dubbo 的特點分別有連通性、健壯性、伸縮性、以及向未來架構的升級性,特點的詳細介紹也可以參考官方檔案,
1.1.3 整體設計

圖例說明:
- 圖中左邊淡藍背景的為服務消費方使用的介面,右邊淡綠色背景的為服務提供方使用的介面,位于中軸線上的為雙方都用到的介面,
- 圖中從下至上分為十層,各層均為單向依賴,右邊的黑色箭頭代表層之間的依賴關系,每一層都可以剝離上層被復用,其中,Service 和 Config 層為 API,其它各層均為 SPI,
- 圖中綠色小塊的為擴展介面,藍色小塊為實作類,圖中只顯示用于關聯各層的實作類,
- 圖中藍色虛線為初始化程序,即啟動時組裝鏈,紅色實線為方法呼叫程序,即運行時調時鏈,紫色三角箭頭為繼承,可以把子類看作父類的同一個節點,線上的文字為呼叫的方法,
**各層說明: **
- config 配置層:對外配置介面,以
ServiceConfig,ReferenceConfig為中心,可以直接初始化配置類,也可以通過 spring 決議配置生成配置類 - proxy 服務代理層:服務介面透明代理,生成服務的客戶端 Stub 和服務器端 Skeleton, 以
ServiceProxy為中心,擴展介面為ProxyFactory - registry 注冊中心層:封裝服務地址的注冊與發現,以服務 URL 為中心,擴展介面為
RegistryFactory,Registry,RegistryService - cluster 路由層:封裝多個提供者的路由及負載均衡,并橋接注冊中心,以
Invoker為中心,擴展介面為Cluster,Directory,Router,LoadBalance - monitor 監控層:RPC 呼叫次數和呼叫時間監控,以
Statistics為中心,擴展介面為MonitorFactory,Monitor,MonitorService - protocol 遠程呼叫層:封裝 RPC 呼叫,以
Invocation,Result為中心,擴展介面為Protocol,Invoker,Exporter - exchange 資訊交換層:封裝請求回應模式,同步轉異步,以
Request,Response為中心,擴展介面為Exchanger,ExchangeChannel,ExchangeClient,ExchangeServer - transport 網路傳輸層:抽象 mina 和 netty 為統一介面,以
Message為中心,擴展介面為Channel,Transporter,Client,Server,Codec - serialize 資料序列化層:可復用的一些工具,擴展介面為
Serialization,ObjectInput,ObjectOutput,ThreadPool
1.2 環境搭建
接下來逐步對dubbo各個模塊的原始碼以及原理進行決議,目前dubbo框架已經交由Apache基金會進行范訓,被在github開源,
Dubbo 社區目前主力維護的有 2.6.x 和 2.7.x 兩大版本,其中,
- 2.6.x 主要以 bugfix 和少量 enhancements 為主,因此能完全保證穩定性
- 2.7.x 作為社區的主要開發版本,得到持續更新并增加了大量新 feature 和優化,同時也帶來了一些穩定性挑戰
1.2.1 原始碼拉取
通過以下的這個命令簽出最新的dubbo專案原始碼,并匯入到IDEA中
git clone https://github.com/apache/dubbo.git dubbo

可以看到Dubbo被拆分成很多的Maven專案,在后續課程中會介紹左邊每個模塊的大致作用,
下載原始碼匯入工程后,進行編譯,并跳過測驗,這個程序中可能會遇到以下問題
[ERROR] Failed to execute goal org.xolstice.maven.plugins:protobuf-maven-plugin:0.5.1:compile (default) on project dubbo-serialization-protobuf: Missing: [ERROR] ---------- [ERROR] 1) com.google.protobuf:protoc:exe:windows-x86_64:3.7.1 [ERROR] [ERROR] Try downloading the file manually from the project website. [ERROR] [ERROR] Then, install it using the command: [ERROR] mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.7.1 -Dclassifier=windows-x86_64 -Dpackaging=exe -Dfile=/path/to/file [ERROR] [ERROR] Alternatively, if you host your own repository you can deploy the file there: [ERROR] mvn deploy:deploy-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.7.1 -Dclassifier=windows-x86_64 -Dpackaging=exe -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id] [ERROR] [ERROR] Path to dependency: [ERROR] 1) org.apache.dubbo:dubbo-serialization-protobuf:jar:2.7.8 [ERROR] 2) com.google.protobuf:protoc:exe:windows-x86_64:3.7.1 [ERROR] [ERROR] ---------- [ERROR] 1 required artifact is missing. [ERROR] [ERROR] for artifact: [ERROR] org.apache.dubbo:dubbo-serialization-protobuf:jar:2.7.8 [ERROR] [ERROR] from the specified remote repositories: [ERROR] apache.snapshots (https://repository.apache.org/snapshots, releases=false, snapshots=true), [ERROR] alimaven (http://maven.aliyun.com/nexus/content/groups/public/, releases=true, snapshots=false)手動下載,按照提示的命令執行
mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.7.1 -Dclassifier=windows-x86_64 -Dpackaging=exe -Dfile=C:\Users\22863\Desktop\test\protoc-3.7.1-windows-x86_64.exe
1.2.2 原始碼結構
通過如下圖形可以大致的了解到,dubbo原始碼各個模塊的相關作用:

模塊說明:
- dubbo-common 公共邏輯模塊:包括 Util 類和通用模型,
- dubbo-remoting 遠程通訊模塊:相當于 Dubbo 協議的實作,如果 RPC 用 RMI協議則不需要使用此包,
- dubbo-rpc 遠程呼叫模塊:抽象各種協議,以及動態代理,只包含一對一的呼叫,不關心集群的管理,
- dubbo-cluster 集群模塊:將多個服務提供方偽裝為一個提供方,包括:負載均衡, 容錯,路由等,集群的地址串列可以是靜態配置的,也可以是由注冊中心下發,
- dubbo-registry 注冊中心模塊:基于注冊中心下發地址的集群方式,以及對各種注冊中心的抽象,
- dubbo-monitor 監控模塊:統計服務呼叫次數,呼叫時間的,呼叫鏈跟蹤的服務,
- dubbo-config 配置模塊:是 Dubbo 對外的 API,用戶通過 Config 使用Dubbo,隱藏 Dubbo 所有細節,
- dubbo-container 容器模塊:是一個 Standlone 的容器,以簡單的 Main 加載 Spring 啟動,因為服務通常不需要 Tomcat/JBoss 等 Web 容器的特性,沒必要用 Web 容器去加載服務,
1.2.3 環境匯入
在本次課程中,不僅講解dubbo原始碼還會涉及到相關的基礎知識,為了方便學員快速理解并掌握各個內容,已經準備好了相關工程,只需匯入到IDEA中即可,對于工程中代碼的具體作用,在后續課程會依次講解
1.2.4 測驗
(1) 安裝zookeeper
(2) 修改官網案例,配置zookeeper地址
(3) 啟動服務提供者,啟動服務消費者
1.2.5 管理控制臺
-
下載管理控制臺, GITHUB地址
-
進入原始碼目錄, 進行打包編譯
mvn clean package -Dmaven.test.skip=true構建成功提示:

如果構建程序中出現nodejs安裝包下載錯誤, 可以將安裝包直接放置maven倉庫內(資料中已提供安裝包),
?
-
啟動后臺管理服務
java -jar dubbo-admin-0.2.0-SNAPSHOT.jar

-
管理后臺
地址: http://127.0.0.1:8080/
默認賬戶名和密碼都為root

進入管理后臺, 可以看到所啟動的服務端與消費端,
本文由
傳智教育博學谷教研團隊發布,如果本文對您有幫助,歡迎
關注和點贊;如果您有任何建議也可留言評論或私信,您的支持是我堅持創作的動力,轉載請注明出處!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/509301.html
標籤:其他
上一篇:Spring 后置處理器【1】
下一篇:map和flatMap的區別
