成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

dubbo源碼解析——Router

zhangqh / 1124人閱讀

摘要:我們先來(lái)看看的繼承體系圖從圖中可以看出他有三個(gè)實(shí)現(xiàn)類分別是,,判斷是否需要篩選的路由,相對(duì)比較簡(jiǎn)單沒(méi)有配置參數(shù),直接選擇正常的獲取配置參數(shù),判斷是否需要選擇正常選擇剔除的判斷是否的方式判斷是否協(xié)議腳本路由規(guī)則支持腳本引擎的所有腳本,比如等,

我們先來(lái)看看Router的繼承體系圖

從圖中可以看出,他有三個(gè)實(shí)現(xiàn)類,分別是ConditionRouter,MockInvokersSelector,ScriptRouter

MockInvokersSelector

判斷是否需要篩選mock invoker的路由,相對(duì)比較簡(jiǎn)單

@Override
    public  List> route(final List> invokers,
                                      URL url, final Invocation invocation) throws RpcException {
        if (invocation.getAttachments() == null) {
            // 沒(méi)有配置參數(shù),直接選擇正常的invoker
            return getNormalInvokers(invokers);
        } else {
            // 獲取mock配置參數(shù),判斷是否需要mock
            String value = invocation.getAttachments().get(Constants.INVOCATION_NEED_MOCK);
            if (value == null)
                // 選擇正常invoker
                return getNormalInvokers(invokers);
            else if (Boolean.TRUE.toString().equalsIgnoreCase(value)) {
                // 選擇mock invoker
                return getMockedInvokers(invokers);
            }
        }
        return invokers;
    }

    private  List> getMockedInvokers(final List> invokers) {
        if (!hasMockProviders(invokers)) {
            return null;
        }
        List> sInvokers = new ArrayList>(1);
        for (Invoker invoker : invokers) {
            if (invoker.getUrl().getProtocol().equals(Constants.MOCK_PROTOCOL)) {
                sInvokers.add(invoker);
            }
        }
        return sInvokers;
    }

    private  List> getNormalInvokers(final List> invokers) {
        if (!hasMockProviders(invokers)) {
            return invokers;
        } else {
            // 剔除mock的invoker
            List> sInvokers = new ArrayList>(invokers.size());
            for (Invoker invoker : invokers) {
                if (!invoker.getUrl().getProtocol().equals(Constants.MOCK_PROTOCOL)) {
                    sInvokers.add(invoker);
                }
            }
            return sInvokers;
        }
    }

    private  boolean hasMockProviders(final List> invokers) {
        boolean hasMockProvider = false;
        for (Invoker invoker : invokers) {
            // 判斷是否mock invoker的方式:判斷protocol是否mock協(xié)議
            if (invoker.getUrl().getProtocol().equals(Constants.MOCK_PROTOCOL)) {
                hasMockProvider = true;
                break;
            }
        }
        return hasMockProvider;
    }
ScriptRouter

腳本路由規(guī)則 支持 JDK 腳本引擎的所有腳本,比如:javascript, jruby, groovy 等,通過(guò) type=javascript 參數(shù)設(shè)置腳本類型,缺省為 javascript。

ConditionRouter

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72130.html

相關(guān)文章

  • dubbo源碼解析——概要篇

    摘要:服務(wù)提供者代碼上面這個(gè)類會(huì)被封裝成為一個(gè)實(shí)例,并新生成一個(gè)實(shí)例。這樣當(dāng)網(wǎng)絡(luò)通訊層收到一個(gè)請(qǐng)求后,會(huì)找到對(duì)應(yīng)的實(shí)例,并調(diào)用它所對(duì)應(yīng)的實(shí)例,從而真正調(diào)用了服務(wù)提供者的代碼。 這次源碼解析借鑒《肥朝》前輩的dubbo源碼解析,進(jìn)行源碼學(xué)習(xí)。總結(jié)起來(lái)就是先總體,后局部.也就是先把需要注意的概念先拋出來(lái),把整體架構(gòu)圖先畫出來(lái).讓讀者拿著地圖跟著我的腳步,并且每一步我都提醒,現(xiàn)在我們?cè)谀?我們下一...

    Meathill 評(píng)論0 收藏0
  • dubbo源碼解析——消費(fèi)過(guò)程

    摘要:上一篇源碼解析概要篇中我們了解到中的一些概念及消費(fèi)端總體調(diào)用過(guò)程。由于在生成代理實(shí)例的時(shí)候,在構(gòu)造函數(shù)中賦值了,因此可以只用該進(jìn)行方法的調(diào)用。 上一篇 dubbo源碼解析——概要篇中我們了解到dubbo中的一些概念及消費(fèi)端總體調(diào)用過(guò)程。本文中,將進(jìn)入消費(fèi)端源碼解析(具體邏輯會(huì)放到代碼的注釋中)。本文先是對(duì)消費(fèi)過(guò)程的總體代碼邏輯理一遍,個(gè)別需要細(xì)講的點(diǎn),后面會(huì)專門的文章進(jìn)行解析。...

    darkbug 評(píng)論0 收藏0
  • Dubbo 源碼分析 - 集群容錯(cuò)之 Router

    摘要:源碼分析條件路由規(guī)則有兩個(gè)條件組成,分別用于對(duì)服務(wù)消費(fèi)者和提供者進(jìn)行匹配。如果服務(wù)提供者匹配條件為空,表示對(duì)某些服務(wù)消費(fèi)者禁用服務(wù)。此時(shí)第六次循環(huán)分隔符,,。第二個(gè)和第三個(gè)參數(shù)來(lái)自方法的參數(shù)列表,這兩個(gè)參數(shù)分別為服務(wù)提供者和服務(wù)消費(fèi)者。 1. 簡(jiǎn)介 上一篇文章分析了集群容錯(cuò)的第一部分 -- 服務(wù)目錄 Directory。服務(wù)目錄在刷新 Invoker 列表的過(guò)程中,會(huì)通過(guò) Router...

    jcc 評(píng)論0 收藏0
  • dubbo源碼解析(四十)集群——router

    摘要:源碼分析一創(chuàng)建一個(gè)該類是基于條件表達(dá)式規(guī)則路由工廠類。路由工廠獲得配置項(xiàng),默認(rèn)為獲得獲得類型讀取規(guī)則獲得腳本路由獲得路由后記該部分相關(guān)的源碼解析地址該文章講解了集群中關(guān)于路由規(guī)則實(shí)現(xiàn)的部分。 集群——router 目標(biāo):介紹dubbo中集群的路由,介紹dubbo-cluster下router包的源碼。 前言 路由規(guī)則 決定一次 dubbo 服務(wù)調(diào)用的目標(biāo)服務(wù)器,分為條件路由規(guī)則和腳本路...

    FullStackDeveloper 評(píng)論0 收藏0
  • dubbo源碼解析(三十七)集群——directory

    摘要:首先將根據(jù)路由規(guī)則服務(wù)提供者和配置規(guī)則三種類型分開(kāi),分別放入三個(gè)集合,然后對(duì)每個(gè)集合進(jìn)行修改或者通知設(shè)置禁止訪問(wèn)置空關(guān)閉所有的關(guān)閉禁止訪問(wèn)引用老的傳入的為空,說(shuō)明是路由規(guī)則或配置規(guī)則發(fā)生改變,此時(shí)是空的,直接使用。 集群——directory 目標(biāo):介紹dubbo中集群的目錄,介紹dubbo-cluster下directory包的源碼。 前言 我在前面的文章中也提到了Directory...

    blastz 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<