Dubbo URL 資料報結構

2022-02-06 18:24:13 字數 2855 閱讀 4983

一、dubbo中的url

乙個標準的 url 格式至多可以包含如下的幾個部分

protocol://username:password@host:port/path?key=value&key=value 

在 dubbo 中,也使用了類似的 url,主要用於在各個擴充套件點之間傳遞資料,組成此 url 物件的具體引數如下:

public url(string protocol, string username, string password, string host, int port, string path, mapparameters) 

this.protocol =protocol;

this.username =username;

this.password =password;

this.host =host;

this.port = (port < 0 ? 0: port);

this.path =path;

//trim the beginning "/"

while(path != null && path.startswith("/"))

if (parameters == null

) else

this.parameters =collections.unmodifiablemap(parameters);

}

示例描述乙個 dubbo 協議的服務

dubbo:

描述乙個 zookeeper 註冊中心

描述乙個消費者

url的生命週期

(1)解析服務

基於 dubbo.jar 內的 meta-inf/spring.handlers 配置,spring 在遇到 dubbo 命名空間時,會** dubbonamespacehandler。

所有 dubbo 的標籤,都統一用 dubbobeandefinitionparser 進行解析,基於一對一屬性對映,將 xml 標籤解析為 bean 物件。

在 serviceconfig.export() 或 referenceconfig.get() 初始化時,將 bean 物件轉換 url 格式,所有 bean 屬性轉成 url 的引數。

然後將 url 傳給協議擴充套件點,基於擴充套件點自適應機制,根據 url 的協議頭,進行不同協議的服務暴露或引用。

(2)暴露服務

1. 只暴露服務埠:

在沒有註冊中心,直接暴露提供者的情況下,serviceconfig 解析出的 url 的格式為:dubbo://service-host/com.foo.fooservice?version=1.0.0。

基於擴充套件點自適應機制,通過 url 的 dubbo:// 協議頭識別,直接呼叫 dubboprotocol的 export() 方法,開啟服務埠。

2. 向註冊中心暴露服務:

在有註冊中心,需要註冊提供者位址的情況下,serviceconfig 解析出的 url 的格式為: registry://registry-host/org.apache.dubbo.registry.registryservice?export=url.encode("dubbo://service-host/com.foo.fooservice?version=1.0.0"),

基於擴充套件點自適應機制,通過 url 的 registry:// 協議頭識別,就會呼叫 registryprotocol 的 export() 方法,將 export 引數中的提供者 url,先註冊到註冊中心。

再重新傳給 protocol 擴充套件點進行暴露: dubbo://service-host/com.foo.fooservice?version=1.0.0,然後基於擴充套件點自適應機制,通過提供者 url 的 dubbo:// 協議頭識別,就會呼叫 dubboprotocol 的 export() 方法,開啟服務埠。

(3)引用服務

1. 直連引用服務:

在沒有註冊中心,直連提供者的情況下,referenceconfig 解析出的 url 的格式為:dubbo://service-host/com.foo.fooservice?version=1.0.0。

基於擴充套件點自適應機制,通過 url 的 dubbo:// 協議頭識別,直接呼叫 dubboprotocol 的 refer() 方法,返回提供者引用。

2. 從註冊中心發現引用服務:

在有註冊中心,通過註冊中心發現提供者位址的情況下,referenceconfig 解析出的 url 的格式為:registry://registry-host/org.apache.dubbo.registry.registryservice?refer=url.encode("consumer://consumer-host/com.foo.fooservice?version=1.0.0")。

基於擴充套件點自適應機制,通過 url 的 registry:// 協議頭識別,就會呼叫 registryprotocol 的 refer() 方法,基於 refer 引數中的條件,查詢提供者 url,如: dubbo://service-host/com.foo.fooservice?version=1.0.0。

基於擴充套件點自適應機制,通過提供者 url 的 dubbo:// 協議頭識別,就會呼叫 dubboprotocol 的 refer() 方法,得到提供者引用。

然後 registryprotocol 將多個提供者引用,通過 cluster 擴充套件點,偽裝成單個提供者引用返回。

url 統一模型的意義

對於 dubbo 中的 url,有人理解為配置匯流排,有人理解為統一配置模型,說法雖然不同,但都是在表達乙個意思,這樣的 url 在 dubbo 中被當做是公共契約,所有擴充套件點引數都包含 url 引數,url 作為上下文資訊貫穿整個擴充套件點設計體系。

IP資料報 TCP資料報結構詳解

一般來說,網路程式設計我們僅僅須要呼叫一些封裝好的函式或者元件就能完畢大部分的工作,可是一些特殊的情況下,就須要深入的理解 網路資料報的結構,以及協議分析。如 網路監控,故障排查等 ip包是不安全的,可是它是網際網路的基礎,在各方面都有廣泛的應用。由ip協議衍生的協議族有10數種 據我所知 以後還會...

IP資料報結構

ip資料報頭長度 20 60位元組 一般為20位元組 可選項一般不用 ipsecvpn ttl值 對首部字段加密時用到 ip資料報長度 mtu 1500 china 版本 4 0100 ipv4 0110 ipv6 首部長度 4 0000 1111 0 15 x4位元組 0 60位元組 ip包頭的長...

IP資料報結構

version 版本 字段長度為4位,標識了資料報的ip版本號。其中0100表示ip版本4,0110表示ip版本6 其他所有版本號僅作為 歷史產物 ihl 首部長度 字段長度為4位,以位元組為單位表示整個ip包中除資料欄位外的長度。最小為20,最大為60。ps 可選項的範圍為0到40個位元組 typ...