Dubbo

一. RPC(遠(yuǎn)程過程調(diào)用)?RPC并不是一個(gè)具體的技術(shù),而是指整個(gè)網(wǎng)絡(luò)遠(yuǎn)程調(diào)用過程

RPC是一個(gè)泛化的概念,嚴(yán)格來說一切遠(yuǎn)程過程調(diào)用手段都屬于RPC范疇。各種開發(fā)語言都有自己的RPC框架。Java中的RPC框架比較多,廣泛使用的有RMI、Hessian、Dubbo等。

RPC的組件:? 1.客戶端Client(服務(wù)調(diào)用者)? 2.客戶端存根Stub: 存放服務(wù)端地址信息,將客戶端的請求參數(shù)打包成網(wǎng)絡(luò)消息,再通過網(wǎng)絡(luò)發(fā)送給服務(wù)方? ?3.服務(wù)端存根Stub: 接受客戶端發(fā)送過來的消息并解包,再調(diào)用本地服務(wù)? ?4.服務(wù)端Server: 服務(wù)提供者

執(zhí)行過程詳解

二.? Apache Dubbo概述

Dubbo提供了三大核心能力:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯(cuò)和負(fù)載均衡,以及服務(wù)自動注冊和發(fā)現(xiàn)。

Dubbo架構(gòu)圖(紅色虛線異步訪問 紅色實(shí)線同步訪問)

Provider 是服務(wù)的提供方 / Consumer 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方 /

Registry 服務(wù)注冊與發(fā)現(xiàn)的注冊中心? /? Monitor??統(tǒng)計(jì)服務(wù)的調(diào)用次數(shù)和調(diào)用時(shí)間的監(jiān)控中心

1. 服務(wù)容器Container負(fù)責(zé)啟動,加載,運(yùn)行服務(wù)提供者

2. 服務(wù)提供者在啟動時(shí),向注冊中心注冊自己提供的服務(wù)。

3. 服務(wù)消費(fèi)者在啟動時(shí),向注冊中心訂閱自己所需的服務(wù)。

4. 注冊中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊中心將基于長連接推送變更數(shù)據(jù)給消費(fèi)者。

5. 服務(wù)消費(fèi)者,從提供者地址列表中,基于軟負(fù)載均衡算法,選一臺提供者進(jìn)行調(diào)用,如果調(diào)用失敗,再選另一臺調(diào)用。

6. 服務(wù)消費(fèi)者和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。

三. 服務(wù)注冊中心 Zookeeper (支持變更推送)

zkServer.cmd 開啟服務(wù)? zkCli.cmd 命令

get 節(jié)點(diǎn)路徑 獲取節(jié)點(diǎn)中的值? /? delete 節(jié)點(diǎn)路徑 刪除節(jié)點(diǎn) 只能刪除空節(jié)點(diǎn),即不能有子節(jié)點(diǎn)

rmr 節(jié)點(diǎn)路徑 遞歸刪除節(jié)點(diǎn) remove recursion? /? ?stat 節(jié)點(diǎn)路徑 查看節(jié)點(diǎn)狀態(tài)

四. Dubbo快速開發(fā)(Dubbo作為RPC的框架 核心功能就是遠(yuǎn)程調(diào)用)

服務(wù)提供者, 服務(wù)消費(fèi)者 會使用共同的接口

1. 創(chuàng)建父工程(沒有代碼,主要添加工程需要的庫的依賴管理)DependencyManagement

1.1 創(chuàng)建不選擇骨架??GroupID:com.itheima.study.dubbo??ArtifactId:study-dubbo

1.2? 因?yàn)椴粚?shí)現(xiàn)代碼 所以刪除src目錄

1.3? 修改pom.xml文件? 抽取版本、增加賴庫依賴管理? (注意dubbo版本必須2.6.2以上)

(spring webmvc / dubbo / zookeeper / zookeeper client)?

2. 創(chuàng)建接口模塊( 主要放業(yè)務(wù)接口的定義,服務(wù)消費(fèi)者模塊和服務(wù)提供者模塊公共依賴模塊)

2.1? 在父工程的基礎(chǔ)上創(chuàng)建子模塊,不選擇任何骨架 (創(chuàng)建到父工程下面)

2.2 修改pom.xml 增加打包方式

2.3 創(chuàng)建接口 寫入方法

3. 服務(wù)提供者模塊( 需要在容器啟動時(shí),把服務(wù)注冊到zookeeper中)

3.1? 使用webapp骨架創(chuàng)建模塊,導(dǎo)入依賴?spring-webmvc、zookeeper及客戶端和<build>編譯插件tomcat7

3.2?創(chuàng)建java源代碼目錄,并增加業(yè)務(wù)實(shí)現(xiàn)類UserServiceImpl,需要實(shí)現(xiàn)UserService接口

3.3?創(chuàng)建resources資源目錄,并創(chuàng)建spring-dubbo-provider.xml 配置文件:

配置dubbo的應(yīng)用名稱 /? 配置dubbo注冊中心Zookeeper地址 /? 配置dubbo協(xié)議名稱和服務(wù)端口

配置dubbo注解包掃描? /? 配置spring自動掃描 /? 配置需要暴露的業(yè)務(wù)接口及實(shí)例

3.4??將資料的log4j.properties配置文件拷貝到resources目錄下

3.5??在web.xml文件中,配置spring監(jiān)聽器,指定spring配置文件加載位置

3.6??啟動服務(wù)提供者 注意 :?消費(fèi)者與提供者應(yīng)用名稱不能相同 /

如果有多個(gè)服務(wù)提供者,名稱不能相同,通信端口也不能相同 /

只有服務(wù)提供者才會配置服務(wù)發(fā)布的協(xié)議

4. 服務(wù)消費(fèi)者模塊

模塊基于是Web應(yīng)用,需要引入spring-webmvc,需要在容器啟動時(shí),去zookeeper注冊中心訂閱服務(wù),需要引入zookeeper及客戶端依賴。

4.1? 使用webapp 骨架創(chuàng)建,導(dǎo)入依賴坐標(biāo)spring-webmvc、zookeeper及客戶端和編譯插件tomcat7

4.2? 創(chuàng)建java源代碼目錄,并添加 UserController類 (控制器類UserController,提供web方法login)

4.3??創(chuàng)建resources資源目錄,并創(chuàng)建spring-dubbo-consumer.xml 配置文件:

配置dubbo的應(yīng)用名稱 /? 配置dubbo注冊中心Zookeeper地址 /? 配置dubbo協(xié)議名稱和服務(wù)端口

配置dubbo注解包掃描 /? 配置spring自動掃描 /? 配置需要訂閱的業(yè)務(wù)接口及引用

4.4??將資料的log4j.properties配置文件拷貝到resources目錄下

4.5??在web.xml文件中,配置SpringMVC

4.6??啟動服務(wù)消費(fèi)者,并測試訪問

五.? Dubbo 管理控制臺

因?yàn)槲覀冃枰?zookeeper注冊中心都注冊了哪些服務(wù),有哪些消費(fèi)者類消費(fèi)這些服務(wù)

1. 安裝:? 將dubbo-admin-2.6.0.war文件復(fù)制到tomcat的webapps目錄下 /

啟動tomcat,此war文件會自動解壓? /??修改WEB-INF下的dubbo.properties文件 /重啟tomcat

2.? 使用 :? 訪問http://localhost:8080/dubbo-admin-2.6.0/,輸入用戶名(root)和密碼(root) /?

啟動服務(wù)提供者工程和服務(wù)消費(fèi)者工程,可以在查看到對應(yīng)的信息 /?

六. Dubbo 相關(guān)配置說明

服務(wù)提供者和服務(wù)消費(fèi)者前面章節(jié)實(shí)現(xiàn)都是基于配置文件進(jìn)行服務(wù)注冊與訂閱,如果使用包掃描,可以使用注解方式實(shí)現(xiàn)

1. 把spring-dubbo-provider中的服務(wù)注冊配置注釋掉,如圖所示

2.??在UserServiceImpl類中頭部,使用注解? @Service

3.把spring-dubbo-consumer中的控制器初始化及服務(wù)訂閱配置注釋掉,如圖所示

4.? ?采用注解初始化控制器,在控制器頭部加入@Controller

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容