暴露服務(wù)。類似平時(shí)網(wǎng)絡(luò)編程寫server,需要打開socket,監(jiān)聽端口等。只不過(guò)RPC有整套的封裝。下面我們通過(guò)斷點(diǎn)跟隨源碼,梳理下整個(gè)流程。
采用某種技術(shù)(spring?)獲取到服務(wù)相關(guān)的所有配置后,就到了暴露服務(wù)的入口函數(shù)ServiceBean.afterPropertiesSet,接下來(lái)的調(diào)用鏈條是:
ServiceConfig.export ->
ServiceConfig.doExport ->
ServiceConfig.doExportUrls->
ServiceConfig.doExportUrlsFor1Protocol
ProxyFactory.getInvoker(ref, (Class) interfaceClass, url) // 獲得invoker
Protocol.export(invoker) // 暴露服務(wù)?
Exchangers.bind(url, requestHandler) //
Transporters.bind(url, handler)
NettyTransporter.bind(url, ChannelHandler)
NettyServer.dopen()
相關(guān)細(xì)節(jié)分析
- ProtocolListenerWrapper 和 ProtocolFilterWrapper(串聯(lián)filter調(diào)用鏈)
- spring加載啟動(dòng)一大堆
- ProxyFactory.getInvoker(ref, (Class) interfaceClass, url)
相關(guān)技術(shù)點(diǎn):動(dòng)態(tài)代理技術(shù),代理模式
- 裝飾模式
服務(wù)暴露前的注冊(cè):創(chuàng)建同注冊(cè)中心的鏈接,然后再走真正的服務(wù)協(xié)議暴露流程。 Protocol利用裝飾模式的體現(xiàn):RegistryProtocol對(duì)Protocol的包裝
- Protocol.export相關(guān)流程
參考
- 官網(wǎng):http://dubbo.io/
- 啟動(dòng)Provider: http://gaofeihang.cn/archives/155
- http://blog.csdn.net/lipslive/article/details/46530361