dubbo 服務發布原始碼分析
export() 進行服務發布
首先會獲得註冊中心集合列表以及協議集合列表,遍歷協議中心列表進行多協議發布服務
服務發布時,會根據配置檔案的引數資訊封裝成map物件,最後將map物件轉換成url位址的引數
根據url位址的協議頭:registry://*** ,會在 protocol.exort(url) 中,進入到registryprotocol#export()方法中,在該方法中主要做了一下幾步
做本地發布:會根據協議將協議頭由 registry:// 轉換成 dubbo:// 協議,再次呼叫protocol#export進入到dubboprotocol#exprot 中,這裡是通過netty 開啟了乙個監聽
會根據註冊中心的獲得乙個registry, 即zookeeperregistry 並將服務註冊到 zk上。
最後是發起乙個訂閱的功能,主要是能動態的去改變服務提供方提供的服務資訊。
servicebean
發布(export)入口
public
class
servicebean
extends
serviceconfig
implements
initializingbean
, disposablebean,
// initializingbean
//為介面 bean 提供了初始化方法的方式,凡是實現了該介面的類,在初始化 bean 的時候會執行該方法
@override
public
void
afterpropertiesset()
throws exception
}// disposablebean ,bean 被銷毀的時候,spring 容器會自動執行 destroy 方法,比如釋放資源
@override
public
void
destroy()
throws exception
@override
public
void
throws bean***ception
@override
public
void
// beannameaware 獲得自身初始化時,本身 bean 的 id 屬性
@override
public
void
setbeanname
(string s)
}
從com.alibaba.dubbo.config.serviceconfig#doexporturlsfor1protocol
核心入口開始說起
進行服務發布之前,會獲得配置的註冊中心集合、以及多協議集合,進行多協議的發布
//發布服務
@suppresswarnings()
private
void
doexporturls()
}//發布服務的核心入口
private
void doexporturlsfor1protocol
(protocolconfig protocolconfig, list
registryurls)
invoker<
?> invoker = proxyfactory.
getinvoker
(ref,
(class) inte***ceclass,
registryurl.
addparameterandencoded
(constants.export_key, url.
tofullstring()
));// 服務發布
// protocol :protocol$adpative
// invoker.url:registry:
exporter<
?> exporter = protocol.
export
(invoker)
; exporters.
add(exporter)
;}
protocol$adpative
類資訊
/**
* @author : guaoran
* @description :
* 根據 createadaptiveextensionclass() 動態獲得的 介面卡擴充套件點
* @date :2019/1/7 13:31
*/public
class
protocol$adpative implements
protocol
//客戶端引用
public invoker refer
(class arg0
, url arg1)
throws rpcexception
}
繼續接著exporter> exporter = protocol.export(invoker);
registryprotocol#export()
方法主要做了以下幾步:
做本地發布,在dubboprotocol
開啟乙個 netty 服務進行監聽
獲得乙個 zookeeperregistry 的註冊中心的連線,並將服務註冊到 zk 上
/dubbo-demo/com.guaoran.source.dubbo.demo.ihelloservice/providers/dubbo%3a%2f%2f19..
開啟乙個訂閱
在 zk 上註冊乙個/dubbo-demo/com.guaoran.source.dubbo.demo.ihelloservice/configurators
節點
Dubbo 服務註冊與發現的流程?
流程說明 1 provider 提供者 繫結指定埠並啟動服務 2 指供者連線註冊中心,併發本機 ip 埠 應用資訊和提供服務資訊傳送至註冊中心儲存 3 consumer 消費者 連線註冊中心 並傳送應用資訊 所求服務資訊至註冊中心 4 註冊中心根據 消費 者所求服務資訊匹配對應的提供者列表傳送至co...
Dubbo 之服務發布和註冊(二)(補充)
dubbo 之服務發布和註冊 一 在之前的部落格 中介紹過了,如果發布 dubbo 服務不使用註冊中心的話,可以這麼配置 如果配置了註冊中心 if registryurls null registryurls.size 0 url.getparameter register true if logg...
dubbo 發布和訂閱流程
dubbo介面的發布和介面的呼叫流程如圖所示 各節點說明 角色說明provider 暴露服務的服務提供方consumer 呼叫遠端服務的服務消費方registry 服務註冊與發現的註冊中心monitor 統計服務的呼叫次調和呼叫時間的監控中心container 服務執行容器呼叫關係說明1 服務容器負...