摘要:都是持久化節(jié)點(diǎn),服務(wù)信息是零時(shí)節(jié)點(diǎn),主要是為了監(jiān)聽(tīng)服務(wù)提供方的是否斷開(kāi)連接,做出相應(yīng)處理。訂閱節(jié)點(diǎn)紅框框里面主要做的時(shí)候就是創(chuàng)建服務(wù)對(duì)應(yīng)的節(jié)點(diǎn)創(chuàng)建節(jié)點(diǎn)持久型節(jié)點(diǎn)并監(jiān)聽(tīng)如下節(jié)點(diǎn)創(chuàng)建一個(gè)的監(jiān)聽(tīng)器對(duì)服務(wù)提供者的節(jié)點(diǎn)配置監(jiān)聽(tīng)器。
接著上一篇繼續(xù)看。
上一篇服務(wù)暴露已經(jīng)講完RegistryProtocol#doLocalExport的方法了。下面將服務(wù)是如何被寫(xiě)到zookeeper上的。
RegistryProtocol#getRegistry方法中,從最原始的Invoker里面拿到url,拿到配置的“zookeeper”注冊(cè)協(xié)議,重新構(gòu)造了一個(gè)zookeeper協(xié)議的registryUrl,并從registryFactory【一個(gè)Adaptive類】中拿到一個(gè)ZookeeperRegistryFactory實(shí)例。
.]
RegistryFactory$Adpative代碼【獲取方法:把日志級(jí)別調(diào)測(cè)DEBUG,然后從控制臺(tái)里面找到該端代碼】
package com.alibaba.dubbo.registry; import com.alibaba.dubbo.common.extension.ExtensionLoader; public class RegistryFactory$Adpative implements com.alibaba.dubbo.registry.RegistryFactory { public com.alibaba.dubbo.registry.Registry getRegistry(com.alibaba.dubbo.common.URL arg0) { if (arg0 == null) throw new IllegalArgumentException("url == null"); com.alibaba.dubbo.common.URL url = arg0; String extName = (url.getProtocol() == null ? "dubbo" : url.getProtocol()); if (extName == null) throw new IllegalStateException("Fail to get extension(com.alibaba.dubbo.registry.RegistryFactory) name from url(" + url.toString() + ") use keys([protocol])"); com.alibaba.dubbo.registry.RegistryFactory extension = (com.alibaba.dubbo.registry.RegistryFactory) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.registry.RegistryFactory.class).getExtension(extName); return extension.getRegistry(arg0); } }
執(zhí)行ZookeeperRegistryFactory#getRegistry【模板設(shè)計(jì)模式,對(duì)不對(duì)?!】方法,并調(diào)用ZookeeperRegistryFactory#createRegistry,在ZookeeperRegistryFactory已經(jīng)利用dubbo的IOC原理,注入了一個(gè)ZookeeperTransporter,該對(duì)象利用Adaptive機(jī)制獲得一個(gè)zookeeper客戶端的實(shí)例,默認(rèn)使用zkClinet的實(shí)現(xiàn)方式。
拿到ZookeeperRegistry實(shí)例之后,執(zhí)行抽象類方法AbstractRegistryFactory.getRegistry
ZookeeperRegistry#doRegistry方法,將服務(wù)信息,寫(xiě)到zk接口上。
/dubbo/com.alibaba.dubbo.demo.DemoService/providers都是持久化節(jié)點(diǎn),服務(wù)信息是零時(shí)節(jié)點(diǎn),主要是為了監(jiān)聽(tīng)服務(wù)提供方的是否斷開(kāi)連接,做出相應(yīng)處理。
此時(shí)該服務(wù)的providers節(jié)點(diǎn)已經(jīng)寫(xiě)完了。
2、訂閱/dubbo/*/configrators節(jié)點(diǎn)紅框框里面主要做的時(shí)候就是
創(chuàng)建zk節(jié)點(diǎn)【持久型節(jié)點(diǎn)】、并監(jiān)聽(tīng)如下節(jié)點(diǎn)
/dubbo
----/com.alibaba.dubbo.demo.DemoService
--------/configurators
對(duì)服務(wù)提供者的configurators節(jié)點(diǎn)配置監(jiān)聽(tīng)器。
會(huì)觸發(fā)AbstractRegistry#notify(URL url, NotifyListener listener, List
首先在服務(wù)提供者的節(jié)點(diǎn)樹(shù)中創(chuàng)建configurators節(jié)點(diǎn),然后配置監(jiān)聽(tīng)器OverrideListener,若通過(guò)Dubbo管理系統(tǒng)為服務(wù)設(shè)置動(dòng)態(tài)參數(shù),則動(dòng)態(tài)配置的參數(shù)放在configurators節(jié)點(diǎn)目錄下,并通知服務(wù)端的OverrideListener監(jiān)聽(tīng)器,根據(jù)動(dòng)態(tài)參數(shù)重新生成服務(wù)提供者URL,若URL有變化則重新暴露服務(wù)
3、返回Exporter文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/69238.html
摘要:?jiǎn)?dòng)容器,加載,運(yùn)行服務(wù)提供者。服務(wù)提供者在啟動(dòng)時(shí),在注冊(cè)中心發(fā)布注冊(cè)自己提供的服務(wù)。注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。 一 為什么需要 dubbo 很多時(shí)候,其實(shí)我們使用這個(gè)技術(shù)的時(shí)候,可能都是因?yàn)轫?xiàng)目需要,所以,我們就用了,但是,至于為什么我們需要用到這個(gè)技術(shù),可能自身并不是很了解的,但是,其實(shí)了解技術(shù)的來(lái)由及背景知識(shí),對(duì)...
摘要:面試題服務(wù)提供者能實(shí)現(xiàn)失效踢出是什么原理高頻題服務(wù)宕機(jī)的時(shí)候,該節(jié)點(diǎn)由于是持久節(jié)點(diǎn)會(huì)永遠(yuǎn)存在,而且當(dāng)服務(wù)再次重啟的時(shí)候會(huì)將重新注冊(cè)一個(gè)新節(jié)點(diǎn)。 Dubbo 2.7 版本增加新特性,新系統(tǒng)開(kāi)始使用 Dubbo 2.7.1 嘗鮮新功能。使用過(guò)程中不慎踩到這個(gè)版本的 Bug。 系統(tǒng)架構(gòu) Spring Boot 2.14-Release + Dubbo 2.7.1 現(xiàn)象 Dubbo 服務(wù)者啟動(dòng)...
摘要:調(diào)用流程服務(wù)容器負(fù)責(zé)啟動(dòng),加載,運(yùn)行服務(wù)提供者。服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)。注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。這就是分布式服務(wù)注冊(cè)中心的由來(lái)。 Dubbo是什么 一款分布式服務(wù)框架 高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案。這里簡(jiǎn)單介紹一下RPC,所謂RPC就是遠(yuǎn)程過(guò)程調(diào)用,全稱為Romate Proce...
摘要:調(diào)用流程服務(wù)容器負(fù)責(zé)啟動(dòng),加載,運(yùn)行服務(wù)提供者。服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)。注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。這就是分布式服務(wù)注冊(cè)中心的由來(lái)。 Dubbo是什么 一款分布式服務(wù)框架 高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案。這里簡(jiǎn)單介紹一下RPC,所謂RPC就是遠(yuǎn)程過(guò)程調(diào)用,全稱為Romate Proce...
閱讀 2654·2023-04-25 15:22
閱讀 2824·2021-10-11 10:58
閱讀 1045·2021-08-30 09:48
閱讀 1851·2019-08-30 15:56
閱讀 1730·2019-08-30 15:53
閱讀 1089·2019-08-29 11:16
閱讀 1048·2019-08-23 18:34
閱讀 1638·2019-08-23 18:12