1. 程式人生 > >Dubbo服務暴露原理

Dubbo服務暴露原理

服務暴露原理

這裡寫圖片描述

配置檔案

IOC容器啟動,載入配置檔案的時候
Dubbo標籤處理器,解析每一個標籤

封裝成對應的元件
這裡寫圖片描述

service

解析service標籤
將service標籤資訊,封裝成ServiceBean

ServiceBean

實現了兩個重要機制
這裡寫圖片描述

InitializingBean

Spring的介面
當元件建立完物件之後
會呼叫InitializingBean中的afterPropertiesSet方法

元件屬性設定完成,會回撥這個方法
這裡寫圖片描述

ApplicationListener

應用監聽器
監聽IOC容器的重新整理事件

當IOC容器中,所有物件都建立完成
會回撥onApplicationEvent方法
這裡寫圖片描述

Spring原理

ServiceBean在建立完物件之後
會呼叫afterPropertiesSet方法

IOC容器啟動完成之後
會呼叫onApplicationEvent方法

afterPropertiesSet
設定beanClass的屬性值
這裡寫圖片描述

onApplicationEvent

當IOC容器重新整理完成
如果,不是延遲的、是暴露的,沒有暴露的
呼叫export方法,暴露服務
這裡寫圖片描述

Export

暴露服務
呼叫doExport方法,執行暴露
這裡寫圖片描述

doExport

執行暴露
呼叫doExportUrls方法,暴露URL地址
這裡寫圖片描述

doExportUrls

讀取註冊中心地址,埠號
獲取protocols協議,埠號

For迴圈
可以配置多個protocols標籤
使用多個協議,暴露在多個埠
這裡寫圖片描述

doExportUrlsFor1Protocol

註冊服務到註冊中心
這裡寫圖片描述

Invoker

通過代理工廠,獲取invoker
執行器,包裝了執行者資訊
包含了執行哪個物件、哪個方法、URL地址等
這裡寫圖片描述

protocol.export

暴露invoker

Protocol
基於Java的SPI機制
獲取類載入器,得到介面卡
這裡寫圖片描述

Protocol

Ctrl+T,檢視依賴樹
使用Dubbo協議暴露,註冊到註冊中心
使用DubboProtocol、RegistryProtocol
這裡寫圖片描述

DubboProtocol

呼叫export方法
這裡寫圖片描述

Export

DubboProtocol的export方法
這裡寫圖片描述

RegistryProtocol

呼叫export方法
這裡寫圖片描述

Export

RegistryProtocol的export方法
這裡寫圖片描述

protocol.export(invoker)

首先,呼叫RegistryProtocol的export方法
將服務註冊到註冊中心

然後,呼叫DubboProtocol的export方法
啟動Netty伺服器,監聽Dubbo協議埠

RegistryProtocol

export方法
doLocalExport方法,本地暴露
這裡寫圖片描述

DubboProtocol

export方法
呼叫openServer方法

開啟伺服器
openServer
呼叫createServer方法

建立伺服器
createServer

呼叫Exchangers.bind
繫結伺服器、請求處理器

Exchangers.bind
呼叫getExchanger(url).bind
這裡寫圖片描述
getExchanger(url).bind
呼叫Transporters.bind

傳輸器
這裡寫圖片描述

Transporters.bind

呼叫getTransporter().bind
這裡寫圖片描述

getTransporter().bind

呼叫底層的NettyTransporter
這裡寫圖片描述

NettyTransporter

建立一個Netty伺服器
這裡寫圖片描述
openServer(url)
啟動Netty伺服器,監聽20880埠