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埠