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