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