服務發布和服務的引用到底什麼實現的呢?我們追蹤這個問題進行下面的學習?
首先我們通過控制台檢視服務啟動過程中,日誌記錄了什麼?
通過日誌看出發布的過程:①暴露本地服務 ② 暴露遠端服務 ③啟動netty ④ 連線zookeeper ⑤註冊到zookeeper ⑥監聽zookeeper
the service ready on spring started. service: com.alibaba.dubbo.demo.demoservice, dubbo version: 2.0.0, current host: 127.0.0.1
在暴露本地服務之前,輸出了上述日誌語句。
在容器載入完成後執行export(); 開始暴露;
方法執行順序:export() -> doexport() -> doexporturls() -> doexporturlsfor1protocol();
export() 判斷是否延遲發布,如果延遲發布會新建個daemon執行緒然後呼叫doexport(), 否則直接呼叫doexport();
doexport() 給serviceconfig 裝載註冊中心監控中心等。
doexporturls()
private void doexporturls()
}
遍歷服務協議,為每個協議執行doexporturlsfor1protocol()
此處判斷進行本地暴露或者遠端暴露,在dubbo中我們乙個服務可能既是provider,又是consumer,因此就存在他自己呼叫自己服務的情況,如果再通過網路去訪問,那自然是捨近求遠,因此他是有本地暴露服務的這個設計.本地暴露是直接通過jvm通訊,dubbo。所說的透明,就是指,讓呼叫者對網路請求,編譯碼之類的細節透明,讓我們像呼叫本地服務一樣呼叫遠端服務,甚至感覺不到自己在呼叫遠端服務.
本地暴露的url是以injvm
開頭的,遠端暴露是以registry開頭。
綜上我們完成了具體服務到invoker的轉換。下篇文章將繼續:dubbo 處理服務暴露的關鍵就在 invoker 轉換到 exporter 的過程
dubbo原始碼分析8 服務暴露概述
從上文中可知,com.alibaba.dubbo.config.spring.servicebean類是負責解析的配置的,下面是它的類圖 從outline檢視中可以發現,servicebean類並沒做什麼儲存配置的工作,儲存配置的工作主要是由它的父類在承擔。結合原始碼可以看到servicebean類...
dubbo原始碼學習 四 暴露服務的過程
dubbo採用的nio非同步的通訊,通訊協議預設為 netty,當然也可以選擇 mina,grizzy。在服務端 provider 在啟動時主要是開啟netty監聽,在zookeeper上註冊服務節點,處理消費者請求,返回處理後的訊息給消費者,消費者使用服務時主要是訂閱服務的節點,監聽zookeep...
dubbo服務暴露 本地暴露(二)
serviceconfig類 private void doexporturlsfor1protocol protocolconfig protocolconfig,list registryurls 我們進入這個方法 我們先看proxyfactory.getinvoker 方法,它是生成乙個inv...