一起玩Dubbo,先入個門
本文轉載自微信公眾號「飯談編程」,作者稀飯下雪。轉載本文請聯系飯談編程公眾號。
為啥玩dubbo
先說個大前提,我們公司的游戲一直是單服模式,隨著游戲生命周期的延伸,后續都會出現多種跨服功能,在以前,跨服功能的開發都得基于netty,通過跨服協議通知到遠程服觸發相應邏輯,基本跨服功能開發所占用的時長是本服功能開發的三倍左右,開發效率是比較低的。
為了解決跨服功能開發效率低的問題,我最近奉命搞RPC和服務化,所以研究了下dubbo,基本上是將dubbo里里外外艸了一遍,比較熟悉了,公司項目RPC和服務化的基礎也搭的差不多了,沒猜錯的話,后續就是給同事們分享下dubbo的表和里,反正也是要分享的, 先寫個教程先好了,到時候可以直接發給他們看。
因為dubbo框架比較大,所以打算寫成一個系列,想學dubbo的可以關注我,后續應該會拓展講講我們公司基礎框架的RPC和服務化的設計,有興趣討論的也可以找我。
說個好笑的事情,剛開始接觸dubbo的時候,發音都是嘟波,還和同事們爭執了下,最終查了下,發現是達波。
該篇文章是dubbo文章的第一篇,先教大家將dubbo跑起來,別以為只是啟動那么簡單,還是挺多步驟的,包括啟動注冊中心、后臺啟動等多個步驟,有興趣學dubbo的跟著玩起來吧!
dubbo結構如何
Provider: 暴露服務的服務提供方,其實就是一個提供了服務的服。
Consumer: 調用遠程服務的服務消費方,也就是服務的調用方。
Registry: 服務注冊與發現的注冊中心,服務的調用方和注冊方溝通的渠道、
Monitor: 統計服務的調用次調和調用時間的監控中心。
Container: 服務容器,其實沒必要抽出的概念。
簡單說下調用關系:
- 服務容器負責啟動,加載,運行服務提供者。
- 服務提供者在啟動時,向注冊中心注冊自己提供的服務。
- 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。
- 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者。
- 服務消費者,從提供者地址列表中,基于負載均衡算法,選一臺提供者進行調用。
- 服務消費者和提供者,在內存中累計調用次數和調用時間,定時發送統計數據到監控中心。
將注冊中心跑起來
Zookeeper是啥
注冊中心有多種,這里選擇了Zookeeper,大概描述下Zookeeper,它是一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。
作為一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、名字服務、分布式同步、組服務等。
Zookeeper注冊中心能自動刪除提供者信息,當提供者重啟時,能自動恢復注冊數據。
部署Zookeeper
步驟1:
官網可下載:http://www.apache.org/dyn/closer.cgi/zookeeper/
步驟2:
下載后解壓,Zookeeper 的配置文件在 conf 目錄下,有 zoo_sample.cfg 和 log4j.properties,將zoo_sample.cfg 重命名成zoo.cfg,因為 Zookeeper 在啟動時會找這個文件作為默認配置文件。
說說zoo.cfg文件里面幾個重要的配置
- tickTime:這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
- dataDir:顧名思義就是 Zookeeper 保存數據的目錄,默認情況下,Zookeeper 將寫數據的日志文件也保存在這個目錄里。
- clientPort:這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
步驟3:
運行Zookeeper ,啟動Zookeeper目錄下bin下的zkServer.cmd
啟動之后一直開著,不要關掉這個cmd,記得要在dubbo消費者和提供者運行之前就開啟Zookeeper。
運行成功后是這樣的
將管理后臺跑起來
dubbo-admin是啥
dubbo-admin是dubbo框架的管理后臺,可以對注冊的服務(provider)和服務調用方(comsumer)進行服務治理,包括路由、監控、配置等功能;
dubbo一般都是使用Zookeeper來進行管理服務注冊,而dubbo-admin查看注冊了哪些服務,因為查看服務需要從Zookeeper上查詢的,所以dubbo-admin需要依賴于Zookeeper;
安裝dubbo-admin
步驟1:
下載dubbo-admin工程源碼,地址 https://github.com/apache/dubbo-admin
步驟2:
使用idea打開該工程,啟動入口類
步驟3:
啟動后,默認訪問 http://localhost:7001/
賬號和密碼都輸入root即可進入
最終可以看到該管理頁面。
將dubbo服務跑起來
步驟1:
從github上clone工程源碼 https://github.com/apache/dubbo 到本地
使用Idea導入源碼,并切換到3.0版本
安裝下各種依賴
步驟2:
看dubbo-demo模塊,直接看xml模塊,內部提供了consumer和provider的測試用例
xml模塊中,consumer和provider模塊中resources底下都有個xml配置,描述了服務暴露和服務訂閱的相關詳情。
服務注冊方
服務訂閱方
直接啟動對應的Application,啟動成功后應該可以看到RPC相關調用的日志了。
啟動提供方
啟動訂閱方
通過程序可以看出,在訂閱方一直不斷的去調用提供方的服務
步驟3:
查看admin后臺,可以看到
admin后臺已經有了相關記錄,這個時候我們便可以通過admin后臺進行服務的治理了。
總結
dubbo目前就這樣跑起來了,相信看完應該都會心里留了幾個疑問,比如訂閱方是怎么找到注冊方的,admin后臺修改后怎么通知到訂閱方和注冊方的,訂閱方又是如何實現遠程方法調用的,別急,關注我,下篇文章將從源碼分析dubbo,為你解開一個個疑惑。