粗略的學完springcloud后由於公司的項目有用到一點dubbo,剛好手頭上又有dubbo的學習資料,於是趁機相對系統的學了下duboo框架,今天開始記錄下我的所學所悟;說來慚愧,今年之前,作為一個有差不多兩年開發經驗的程序員竟然連微服務都沒聽過,一方面自己對這方面的技術沒有過多關注,另一方面我從事的公司業務都相對傳統,一個ssh框架一台服務器基本足夠滿足業務需求了;而開始知道微服務這個概念是在我年初有跳槽的想法后,那時候開始關注這方面,才知道有什么服務治理框架springcloud和dubbo;接下來記錄這次學習dubbo的詳細筆記
一、Dubbo介紹
以下內容摘自dubbo官網:
dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現;
而在我目前這個水平的認知里,dubbo就是一款解決服務間通信的框架,他能讓不在一台服務器的各個服務進行相互調用,對使用者來說就像調用本地方法一樣,並為我們整合了智能容錯和負載均衡,當某個服務不可用或是當某個服務新增時dubbo會自動發現並注冊他們。dubbo還提供了管理控制台,我們可以很直觀的看到當前注冊中心的狀態以及注冊中心中注冊的服務(包括服務的提供者和消費者),還可以對這些服務進行各種管理,包括服務動態配置,負載均衡,訪問控制,權重管理等等;下面貼上dubbo官網的架構圖:
由圖可見,和springcloud一樣,dubbo也有服務消費者、提供者以及注冊中心的概念,只不過springcloud整合了eureka作為注冊中心,而dubbo使用的注冊中心由第三方提供;官網推薦使用 zooKeeper;dubbo架構里還提供了一個簡單的Montior(監控中心),它能夠實時監控服務間的調用情況,包括調用的次數,時間以及成功失敗與否,需要注意的是如果monitor掛掉不會影響服務間的相互調用
二、Dubbo環境搭建(基於普通maven項目的搭建,后續會記錄基於springboot的搭建)
接下來進行dubbo的環境搭建,根據架構圖總結為以下幾步:
(一)搭建zooKeeper注冊中心(由於我的老爺機性能,不足以支撐VMware所以我只在Windows環境下搭建了)
(二)dubbo管理控制台的搭建
(三)監控中心的搭建
(四)開發服務提供者和消費者並讓他們在啟動時分別向注冊中心注冊和訂閱服務
(五)進行服務間的調用並測試
(一)搭建zooKeeper注冊中心
1、下載並解壓zooKeeper(https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/)
2、conf目錄下zoo_sample.cfg文件中的clientPort表示zooKeeper的端口號,dataDir的值表示臨時數據存儲的目錄,可以在conf同級目錄新建data文件夾,然后將dataDir的值設成data,即dataDir=../data
3、進入bin目錄,如果這時候啟動zkServer.cmd應該會報錯,原因是zkEnv.cmd定義的zoo.cfg文件找不到,這時候有兩種解決辦法,一是進入/conf目錄將zoo_sample.cfg復制一份改名為zoo.cfg;另一種方法是將bin目錄下的zkEnv.cmd文件以記事本方式打開,將set ZOOCFG=%ZOOCFGDIR%\zoo.cfg改為set ZOOCFG=%ZOOCFGDIR%\zoo_sample.cfg;
4、這時候你可以雙擊或是使用命令行啟動bin下的zkServer.cmd文件了,但是我試過的兩次這時候還是報錯的,錯誤如下圖所示( JAVA_HOME is incorrectly set.):
這應該是JAVA_HOME配置出了問題,可以去zkEnv.cmd進行如下修改:將set JAVA_HOME=%JAVA_HOME:"=%改為set JAVA_HOME="C:\Program Files\Java\jdk1.8.0_181"(等號后面的值是對應的本地jdk路徑),然后將所有用雙引號括起來的JAVA_HOME外面的雙引號去掉,然后重啟zkServer.cmd就能成功啟動zooKeeper了
二、dubbo管理控制台的搭建
1、在https://github.com/apache/incubator-dubbo-ops下載dubbo-admin項目,這里需要注意一點我直接進去的時候默認分支是develop,這個分支應該是各路大神正在開發的,我看每天都有跟新,但一開始我不知道啊,看到它的目錄如下:
我想dubbo的管理控制台都做成前后端分離的了呀,這么高端!於是就給下載下來了,dubbo-admin-backend項目還好,是一個springboot項目,用maven打個包就運行起來了,但是dubbo-admin-frontend項目開始 我也是使用mvn打包,但打出了一個node文件夾,對nodejs我一點了解沒有,后來通過該項目的README.md文件和百度才把他起起來,然后還很欣喜的認為啟動成功了,於是按照控制台的提示打開了dubbo-admin-frontend項目的首頁,結果如下:
各種英文啊,要知道我的概念里dubbo-admin的頁面全是中文的啊(等下搭建成功上圖就知道了),心里還在想難道是dubbo做的更新,於是啟動了之前開發好的一個服務向注冊中心進行注冊然后看控制台有沒有顯示,結果是令我失望的,無論怎么刷新頁面還是如上,啥都沒有,尷尬的是頁面右上角的設置,通知這些按鈕點擊都沒有效果,反應遲鈍的我才意識到這有可能只是個開發中的demo;難怪我百度dubbo-admin-frontend顯示的信息極少啊,於是我才回過頭來想這是為什么,從dubbo官網跳到github然后不死心的慢慢找不同,最后終於發現是我選錯了分支,尷尬一筆(好奇不知道有沒有和我一樣的白痴小白啊,哈哈),當我在相同的地址切換到master分支的時候,我印象中的dubbo-addmin終於出現了,至此浪費了一上午時間的問題終於搞定了,只是好奇這個develops分支下面的是干嘛的,是在准備跟新dubbo-addmin做成前后端分離的項目嗎?希望有知道的大神告知,謝謝
選對分支后的頁面如下(然后直接下載即可):
2、下載下來后進行解壓,進入dubbo-admin文件夾,打開windows的命令控制台(可直接在當前路徑里輸入cmd快速啟動這樣就不用一層層的切換到當前目錄了),輸入命令:mvn clean package -Dmaven.test.skip=true進行打包,打包成功后進入target文件夾,會看到dubbo-admin-0.0.1-SNAPSHOT.jar,同樣使用cmd輸入java -jar dubbo-admin-0.0.1-SNAPSHOT.jar運行該項目,這樣一切正常的話就可以直接訪問了(用戶名密碼默認都為root),訪問成功頁面如下:
需要注意的是,在使用mvn打包前最好進入dubbo-admin/src/main/resources下打開application.properties文件瞄一眼dubbo.registry.address的值是否是上面搭建的zooKeeper注冊中心的地址,本機測試的話只要關注端口號與之前起的zooKeeper端口是否一致即可.可進入zookeeper-3.4.13/conf/zoo_sample.cfg文件查看zooKeeper的端口號
至此dubbo的管理控制台就搭建成功了,后續我們可以在這里查看服務的注冊情況以及對服務的相應管理;
三、簡單監控中心的搭建
1、代碼下載地址和dubboadmin一樣,都位於incubator-dubbo-ops下,只不過dubbo管理控制台是dubbo-admin項目,而監控中心對應的是dubbo-monitor-simple項目,流程其實都是差不多的,把對應的項目打包然后跑起來就好了;但需要注意的是,我們打包之前都要看一樣對應的配置文件里面的注冊中心地址是否正確以及自身的端口號,ubbo-monitor-simple的配置文件在incubator-dubbo-ops-master\dubbo-monitor-simple\src\main\resources\conf\dubbo.properties中;一般我們都在本地測試的話是不用修改的,因為默認的注冊中心就是zookeeper://127.0.0.1:2181;端口號是8080
2、接下來就是跑這個監控中心了,進入dubbo-monitor-simple文件夾,使用maven進行打包並跳過單元測試,命令如下:mvn package -Dmaven.test.skip;打包成功后進入targer文件夾,解壓dubbo-monitor-simple-2.0.0-assembly.tar.gz后會有一個dubbo-monitor-simple-2.0.0文件夾,進入dubbo-monitor-simple-2.0.0\assembly.bin並運行start.bat,這樣監控中心算是啟動起來了,啟動成功后訪問localhost:8080頁面如下:
至此,dubbo的監控中心也算是搭建好了,后續可以結合dubbo-admin完美監控服務的運行狀態,包括接口的暴露、注冊情況,以及他們之前的調用明細
時間關系這篇筆記到此為止,后續記錄運用到dubbo的簡單demo