dubbo 服務(wù)字典

目錄
dubbo 拓展機制 SPI
dubbo 自適應(yīng)拓展機制
dubbo 服務(wù)導(dǎo)出
dubbo 服務(wù)引用
dubbo 服務(wù)字典
dubbo 服務(wù)路由
dubbo 集群
dubbo 負(fù)載均衡
dubbo 服務(wù)調(diào)用過程

官網(wǎng)服務(wù)字典的介紹
本章將分析 AbstractDirectory 和它兩個子類的源碼。AbstractDirectory 封裝了 Invoker 列舉流程试吁,具體的列舉邏輯則由子類實現(xiàn)果港,這是典型的模板模式。而invoker的列舉將會在服務(wù)調(diào)用過程中用到。
接著看AbstractDirectory的list方法贩疙,直接調(diào)用的子類的實現(xiàn)

public List<Invoker<T>> list(Invocation invocation) throws RpcException {
    if (destroyed) {
        throw new RpcException("Directory already destroyed .url: " + getUrl());
    }
    return doList(invocation);
}

1.StaticDirectory

StaticDirectory 即靜態(tài)服務(wù)目錄媳溺,顧名思義,它內(nèi)部存放的 Invoker 是不會變動的雪隧。所以西轩,理論上它和不可變 List 的功能很相似。

protected List<Invoker<T>> doList(Invocation invocation) throws RpcException {
    List<Invoker<T>> finalInvokers = invokers;
    // 進(jìn)行服務(wù)路由
    if (routerChain != null) {
        try {
            finalInvokers = routerChain.route(getConsumerUrl(), invocation);
        } catch (Throwable t) {
            logger.error("Failed to execute router: " + getUrl() + ", cause: " + t.getMessage(), t);
        }
    }
    return finalInvokers == null ? Collections.emptyList() : finalInvokers;
}

StaticDirectory很簡單脑沿,直接返回的invoker數(shù)組藕畔,沒有過多的操作,接下來看RegistryDirectory會比較復(fù)雜

2. RegistryDirectory

RegistryDirectory 是一種動態(tài)服務(wù)目錄捅伤,實現(xiàn)了 NotifyListener 接口劫流。當(dāng)注冊中心服務(wù)配置發(fā)生變化后,RegistryDirectory 可收到與當(dāng)前服務(wù)相關(guān)的變化丛忆。收到變更通知后祠汇,RegistryDirectory 可根據(jù)配置變更信息刷新 Invoker 列表。RegistryDirectory 中有幾個比較重要的邏輯熄诡,第一是 Invoker 的列舉邏輯可很,第二是接收服務(wù)配置變更的邏輯,第三是 Invoker 列表的刷新邏輯凰浮。接下來按順序?qū)@三塊邏輯進(jìn)行分析

2.1列舉 Invoker

public List<Invoker<T>> doList(Invocation invocation) {
    // 服務(wù)提供者關(guān)閉或禁用了服務(wù)我抠,此時拋出 No provider 異常
    if (forbidden) {
        // 1. No service provider 2. Service providers are disabled
        throw new RpcException(RpcException.FORBIDDEN_EXCEPTION, "No provider available from registry " +
                getUrl().getAddress() + " for service " + getConsumerUrl().getServiceKey() + " on consumer " +
                NetUtils.getLocalHost() + " use dubbo version " + Version.getVersion() +
                ", please check status of providers(disabled, not registered or in blacklist).");
    }

    // 判斷是否是分組聚合,
    if (multiGroup) {
        return this.invokers == null ? Collections.emptyList() : this.invokers;
    }

    List<Invoker<T>> invokers = null;
    try {
        // Get invokers from cache, only runtime routers will be executed.
        invokers = routerChain.route(getConsumerUrl(), invocation);
    } catch (Throwable t) {
        logger.error("Failed to execute router: " + getUrl() + ", cause: " + t.getMessage(), t);
    }

    return invokers == null ? Collections.emptyList() : invokers;
}

2.2接收服務(wù)變更通知

RegistryDirectory 是一個動態(tài)服務(wù)目錄袜茧,會隨注冊中心配置的變化進(jìn)行動態(tài)調(diào)整菜拓。因此 RegistryDirectory 實現(xiàn)了 NotifyListener 接口,通過這個接口獲取注冊中心變更通知笛厦。它的notify方法已經(jīng)在上文中的服務(wù)引入過程提到了纳鼎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市裳凸,隨后出現(xiàn)的幾起案子贱鄙,更是在濱河造成了極大的恐慌,老刑警劉巖姨谷,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逗宁,死亡現(xiàn)場離奇詭異,居然都是意外死亡梦湘,警方通過查閱死者的電腦和手機瞎颗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門件甥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人言缤,你說我怎么就攤上這事嚼蚀。” “怎么了管挟?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵轿曙,是天一觀的道長。 經(jīng)常有香客問我僻孝,道長导帝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任穿铆,我火速辦了婚禮您单,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荞雏。我一直安慰自己虐秦,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布凤优。 她就那樣靜靜地躺著悦陋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筑辨。 梳的紋絲不亂的頭發(fā)上俺驶,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音棍辕,去河邊找鬼暮现。 笑死,一個胖子當(dāng)著我的面吹牛楚昭,可吹牛的內(nèi)容都是我干的栖袋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抚太,長吁一口氣:“原來是場噩夢啊……” “哼栋荸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凭舶,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爱沟,沒想到半個月后帅霜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡呼伸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年身冀,在試婚紗的時候發(fā)現(xiàn)自己被綠了钝尸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡搂根,死狀恐怖珍促,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情剩愧,我是刑警寧澤猪叙,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站仁卷,受9級特大地震影響穴翩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锦积,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一芒帕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丰介,春花似錦背蟆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至家浇,卻和暖如春本砰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钢悲。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工点额, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人莺琳。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓还棱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惭等。 傳聞我的和親對象是個殘疾皇子珍手,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容