Dubbo的服务暴露过程
一、URL
???????在說Dobbu之前我們先來講一下URL,為什么要提URL呢?
???????一般而言我們說的 URL 指的就是統一資源定位符,在網絡上一般指代地址,本質上看其實就是一串包含特殊格式的字符串,標準格式如下:
???????而Dubbo就是采用URL的方式作為約定參數類型,也可以理解為Provider和Consumer溝通的樞紐。如果沒有這個標準,那么不同的接口就會以不同的參數來傳遞信息,而且通過統一的契約之后,代碼會顯得更加的規范。
二、服務暴露過程
1、執行過程
第一步:檢測Dubbo配置,如果配置為空則會默認創建,并組裝成URL。
第二步:暴露服務,Provider將服務暴露給本地服務和遠程的服務。
第三步:將Provider服務提交至注冊中心。
2、對象創建過程
第一步:Dubbo將服務實現類轉換成Invoker。
第二步:將Invoker轉換成Exporter。
三、源碼分析
1、在初始化過程中service定義
???????這里實現了ApplicationListener,所以就會在SpringIOC容器刷新完成后調用onApplicationEvent()方法,這個方法里面做的就是服務暴露,也是服務的啟動點。接著通過調用export方法完成暴露過程。
而Dubbo支持多注冊中心,并且支持多個協議,一個服務如果有多個協議那么就都需要暴露。因此需要將多個協議分別向多個注冊中心暴露注冊,這里我們看一下doExportUrls方法具體實現。
2、封裝成invoker
??????至于為什么要封裝成invoker其實就是想屏蔽調用的細節,統一暴露出一個可執行體。
??????然后我們看下export是什么樣子。如下圖,export方法是標注了@Adaptive注解的,因此會生成代理類,然后代理類會根據Invoker里面的URL參數得知具體的協議,然后通過Dubbo SPI機制選擇對應的實現類進行export。
??????對于完整流程我們可以看一下官網的時序圖。
總結
以上是生活随笔為你收集整理的Dubbo的服务暴露过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java编译找不到文件_java报错找不
- 下一篇: interlace和progressiv