Dubbo+Zookeeper+SpringM目錄
Dubbo+Zookeeper+SpringMVC整合實現分佈式服務治理框架... 1
五、Dubbo、Zookeeper與SpringMVC集成測試... 12
Dubbo是主流的採用RPC方式的分佈式服務治理架構之一,實現了分佈式服務註冊、服務治理和服務監控等功能。通常需結合開源的Zookeeper、Redis或阿里數據庫來完成註冊中心的功能。其基本架構及原理如圖1-1所示:
圖1-1 Dubbo實現微服務架構原理圖
節點角色說明:
● Provider: 暴露服務的服務一個或多個提供方。
● Consumer: 調用遠程服務的服務消費方。
● Registry: 服務註冊與發現的註冊中心,本文采用開源Zookeeper作爲服務註冊中心。
● Monitor: 統計服務的調用次調和調用時間的監控中心。
● Container: 服務運行容器。
調用關係說明:
(0)服務容器負責啓動,加載,運行服務提供者。
(1)服務提供者在啓動時,向註冊中心註冊自己提供的服務。
(2)服務消費者在啓動時,向註冊中心訂閱自己所需的服務。
(3)註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。
(4)服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
(5)服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。
二、先決條件
操作系統:CentOS 7.2
JAVA環境:jdk1.7.0_67
三、Zookeeper安裝與配置
本文Zookeeper部署採用由3臺機器組成的集羣模式,以下操作步驟在每臺機器上均需執行,請注意不同機器間配置稍有變化。
3.1 Zookeeper下載與解壓
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz
tar –zxvf zookeeper-3.4.8.tar.gz –C .
cd zookeeper-3.4.8
3.2 複製和編輯配置文件
cp conf/zoo_sample.cfg zoo.cfg
vi conf/zoo.cfg
圖3-1
(1) 修改數據文件目錄,也可採用默認值;
(2)"server.id=host:port:port"中的第一個port是從機器(follower)連接到主機器(leader)的端口號,第二個port是進行leadership選舉的端口號。本文采用集羣方式部署,添加機器時增加相應新記錄即可,由於Zookeeper內部存在仲裁機制,機器數最好是奇數。
3.3 創建myid文件
dataDir所指定的目錄下創建一個文件名爲myid的文件,文件中的內容只有一行,爲本主機對應的id值,也就是圖3-1中server.id中的id。例如:在服務器1中的myid的內容應該寫入1。Zookeeper集羣模式不同機器上配置的id值一定要正確,如圖3-2所示。
圖3-2
3.4 Zookeeper啓動與停止
①Zookeeper啓動
啓動Zookeeeper,啓動成功使用jps可看到名爲“QuorumPeerMain”的進程,如圖3-3所示。注意,與Hadoop和Spark等集羣方式啓動不同,Zookeeper集羣啓動需要在每臺機器上都運行該命令:
./bin/zkServer.sh start
圖3-3
②Zookeeeper停止
./bin/zkServer.sh stop
3.5 Zookeeper命令行基本操作
①連接Zookeeper命令行終端
./bin/zkCli.sh –server 172.16.24.160:2181
圖3-4
②Zookeeper增刪改查基本命令
創建命令:
create /test ‘test’
查詢命令:
get /test
修改命令:
set /test test_new
刪除命令:
delete /test
圖3-5
四、Dubbo管理界面安裝與配置
4.1 Dubbo管理界面下載與解壓
下載Dubbo管理界面dubbo-admin-2.5.4並解壓出來,見附件。
4.2 修改配置文件
解壓後進入dubbo-admin-2.5.4\WEB-INF目錄中,打開dubbo.properties文件如下配置,如圖4-1所示:
圖4-1
4.3 運行
將修改好配置的dubbo-admin-2.5.4整個目標複製到Tomcat根目錄的webapps下,進入Tomcat根目錄執行如下命令進行啓動,如圖4-2所示:
圖4-2
4.4 訪問Dubbo管理界面
打開瀏覽器,輸入地址:http://172.16.24.160:8080/dubbo-admin-2.5.4/,用戶名和密碼均爲root,參考前面dubbo.properties配置,如圖4-3所示。
圖4-3
五、Dubbo、Zookeeper與SpringMVC集成測試
Dubbo、Zookeeper與SpringMVC集成測試需要編寫提供者和消費者程序進行驗證,下文只簡述關鍵步驟,程序開發的細節請參考附件源代碼。
5.1 創建提供者及服務註冊
①創建Maven項目
先開發服務提供者程序,新建Maven項目,配置pom.xml文件加入dubbo、zookeeper等jar包,如圖5-1所示:
圖5-1
②創建接口
編寫提供者的服務接口,如圖5-2所示:
圖5-2
③創建實現類
編寫服務接口的具體實現類,如圖5-3所示:
圖5-3
新建dubbo-provider.xml暴露服務配置文件,配置Zookeeper服務註冊中心的IP、端口號、服務接口和接口實現類等信息,如圖5-4所示:
圖5-4
具體配置說明:
● dubbo:application 標籤一些屬性的說明:
(1) name 必填,當前應用名稱,用於註冊中心計算應用間依賴關係,注意:消費者和提供者應用名不要一樣,此參數不是匹配條件,你當前項目叫什麼名字就填什麼,和提供者消費者角色無關。
● dubbo:registry 標籤一些屬性的說明:
(1)address必填,可以Zookeeper集羣配置,地址可以多個以逗號隔開等。
(2)check可選,註冊中心不存在時,是否報錯。
(3)subscribe可選,是否向此註冊中心訂閱服務,如果設爲false,將只註冊,不訂閱。
(4)register可選,是否向此註冊中心註冊服務,如果設爲false,將只訂閱,不註冊。
(5) dynamic 可選,服務是否動態註冊,如果設爲false,註冊後將顯示後disable狀態,需人工啓用,並且服務提供者停止時,也不會自動取消冊,需人工禁用。
● dubbo: protocol標籤的一些屬性說明:
(1)name 必填,協議名稱,缺省值dubbo。
(2)port可選,dubbo協議缺省端口爲20880,rmi協議缺省端口爲1099,http和hessian協議缺省端口爲80 。
● dubbo:service標籤的一些屬性說明:
(1)interface必填,服務接口的路徑
(2)ref必填,引用對應的實現類的Bean的ID
(3)registry可選,向指定註冊中心註冊,在多個註冊中心時使用,值爲<dubbo:registry>的id屬性,多個註冊中心ID用逗號分隔,如果不想將該服務註冊到任何registry,可將值設爲N/A。
● bean 標籤一些屬性的說明:
(1) id 是實現類的Bean的ID。
(2)class 是實現類的引用路徑。
⑤註冊服務
編寫註冊服務主類Provider.java,如圖5-5所示,讀取並解釋顯露服務的配置文件dubbo-provider.xml,運行Main函數即可將上述寫好的服務註冊到Zookeeper註冊中心上,如圖5-6所示。
圖5-5
圖5-6
5.2 創建消費者及服務調用
①調用服務配置
新建dubbo- consumer.xml調用服務配置文件,配置調用Zookeeper註冊中心IP、端口號和提供商服務接口等信息,如圖5-7所示:
圖5-7
具體配置說明:
● dubbo:application 和dubbo:registry標籤屬性說明同上:
● dubbo:reference標籤屬性說明:
(1)id 必填,服務引用BeanId。
(2)interface,必填,服務接口名,由於dubbo服務治理方式屬於RPC方式,因而消費者需要明確知道服務的完整接口名方可調用。
②調用服務
編寫調用服務主類Consumer.java,如圖5-8所示,讀取並解釋調用服務的配置文件dubbo-consumer.xml,運行Main函數即可完成服務調用,如圖5-9所示。
圖5-8
圖5-9