1. 程式人生 > >Dubbo之服務分組、分組聚合。

Dubbo之服務分組、分組聚合。

服務分組

        當一個介面有多種實現時,可以用group區分。

<dubbo:service group="feedback" interface="com.xxx.IndexService" />
<dubbo:service group="member" interface="com.xxx.IndexService" />
<dubbo:reference id="feedbackIndexService" group="feedback" interface="com.xxx.IndexService" />
<dubbo:reference id="memberIndexService" group="member" interface="com.xxx.IndexService" />

        任意組:(2.2.0以上版本支援,總是隻調一個可用組的實現)

<dubbo:reference id="barService" group="*" interface="com.foo.IndexService" />

分組聚合

        按組合並返回結果,比如選單服務,介面一樣,但有多種實現,用group區分,現在消費方需從每種group中呼叫一次返回結果,合併結果返回,這樣就可以實現聚合選單項。

        從2.1.0版本開始支援


        配置如:(搜尋所有分組)

<dubbo:reference interface="com.xxx.MenuService" group="*" merger="true" />

        或:(合併指定分組)

<dubbo:reference interface="com.xxx.MenuService" group="aaa,bbb" merger="true" />

        或:(指定方法合併結果,其他未指定的方法,將只調用一個Group)

<dubbo:reference interface="com.xxx.MenuService" group="*">
    <dubbo:method name="getMenuItems" merger="true"/>
</dubbo:reference>

        或:(某個方法不合並結果,其他都合併結果)

<dubbo:reference interface="com.xxx.MenuService" group="*" merger="true">
    <dubbo:method name="getMenuItems" merger="false"/>
</dubbo:reference>

        或:(指定合併策略,預設根據返回值型別自動匹配,如果同一型別有兩個合併器時,需指定合併器的名稱)

<dubbo:reference interface="com.xxx.MenuService" group="*">
    <dubbo:method name="getMenuItems" merger="mymerge"/>
</dubbo:reference>

        或:(指定合併方法,將呼叫返回結果的指定方法進行合併,合併方法的引數型別必須是返回結果型別本身)

<dubbo:reference interface="com.xxx.MenuService" group="*">
    <dubbo:method name="getMenuItems" merger=".addAll"/>
</dubbo:reference>