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端口
總結
以上是生活随笔為你收集整理的Dubbo服务暴露原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dubbo标签解析原理
- 下一篇: Dubbo服务引用原理