概述
Dubbo支持同一服務(wù)向多個注冊中心同時注冊,或者不同服務(wù)分別注冊到不同的注冊中心上去,甚至可以同時引用注冊在不同注冊中心上的同名服務(wù)。另外,注冊中心是也支持自定義擴(kuò)展。
多注冊中心注冊
首先dubbo:registry定義多個注冊中心,每個注冊中心使用id作為唯一標(biāo)識;然后曝露服務(wù)時,在dubbo:service的registry屬性上引用要注冊的注冊中心,多個注冊中心id使用逗號分隔
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.Apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 服務(wù)提供方應(yīng)用名稱,方便用于依賴跟蹤,另外,指定使用slf4j日志-->
<dubbo:Application name="coffee-operation-center" logger="slf4j"/>
<!-- 聲明華南、華中、華北三個注冊中心 -->
<dubbo:registry id="huananRegistry" address="zookeeper://192.168.8.156:2181"/>
<dubbo:registry id="huazhongRegistry" address="zookeeper://192.168.8.157:2181" default="false"/>
<dubbo:registry id="huabeiRegistry" address="zookeeper://192.168.8.158:2181" default="false"/>
<!-- 聲明orderService的實現(xiàn)bean -->
<bean id="orderService" class="com.fandou.coffee.order.service.OrderServiceImpl" />
<!-- 曝露訂單服務(wù):注冊到三個注冊中心 -->
<dubbo:service registry="huananRegistry,huazhongRegistry,huabeiRegistry" interface="com.fandou.coffee.api.order.OrderService" ref="orderService"/>
</beans>
不同服務(wù)注冊到不同注冊中心
比如支付服務(wù),在不同的國家地區(qū),可能使用不同的支付服務(wù),有些支付服務(wù)可以跨國家地區(qū),有些只能在本地區(qū)使用
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 服務(wù)提供方應(yīng)用名稱,方便用于依賴跟蹤,另外,指定使用slf4j日志-->
<dubbo:application name="coffee-operation-center" logger="slf4j"/>
<!-- 聲明美洲、亞洲、歐洲三個注冊中心 -->
<dubbo:registry id="americaRegistry" address="zookeeper://192.168.8.156:2181"/>
<dubbo:registry id="asiaRegistry" address="zookeeper://192.168.8.157:2181" default="false"/>
<dubbo:registry id="europeRegistry" address="zookeeper://192.168.8.158:2181" default="false"/>
<!-- 多種在線支付服務(wù) -->
<bean id="weChatPayService" class="com.fandou.coffee.pay.service.WeChatPayServiceImpl" />
<bean id="aliPayService" class="com.fandou.coffee.pay.service.AliPayServiceImpl" />
<bean id="applePayService" class="com.fandou.coffee.pay.service.ApplePayServiceImpl" />
<bean id="paypalPayService" class="com.fandou.coffee.pay.service.PaypalPayServiceImpl" />
<!-- 微信、支付寶在亞洲注冊中心,paypal在美洲和歐洲注冊中心,applePay注冊到全部注冊中心-->
<dubbo:service registry="asiaRegistry" group="pay.wechat" interface="com.fandou.coffee.api.pay.PayService" ref="weChatPayService"/>
<dubbo:service registry="asiaRegistry" group="pay.ali" interface="com.fandou.coffee.api.pay.PayService" ref="aliPayService"/>
<dubbo:service registry="americaRegistry,asiaRegistry,europeRegistry" group="pay.apply" interface="com.fandou.coffee.api.pay.PayService" ref="applePayService"/>
<dubbo:service registry="americaRegistry,europeRegistry" group="pay.paypal" interface="com.fandou.coffee.api.pay.PayService" ref="paypalPayService"/>
</beans>
多注冊中心引用
對于服務(wù)消費(fèi)者方,需要用到哪個注冊中心,就聲明哪個注冊中心,無需將全部注冊中心進(jìn)行聲明。引用服務(wù)的時候,按需引用即可。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 服務(wù)消費(fèi)方應(yīng)用名稱,方便用于依賴跟蹤 -->
<dubbo:application name="coffee-user-center" logger="slf4j">
<dubbo:parameter key="qos.enable" value="true" />
<dubbo:parameter key="qos.accept.foreign.ip" value="false" />
<dubbo:parameter key="qos.port" value="33333" />
</dubbo:application>
<!-- 用到歐洲和亞洲兩個注冊中心 -->
<dubbo:registry id="asiaRegistry" address="zookeeper://192.168.8.157:2181"/>
<dubbo:registry id="europeRegistry" address="zookeeper://192.168.8.158:2181" default="false"/>
<dubbo:protocol name="dubbo" port="20881"/>
<!-- 不同的支付服務(wù)引用從不同的注冊中心中引用 -->
<dubbo:reference registry="asiaRegistry" id="weChatPayService" group="pay.wechat" interface="com.fandou.coffee.api.pay.PayService" check="false" />
<dubbo:reference registry="asiaRegistry" id="aliPayService" group="pay.ali" interface="com.fandou.coffee.api.pay.PayService" check="false" />
<dubbo:reference registry="europeRegistry" id="applyPayService" group="pay.apply" interface="com.fandou.coffee.api.pay.PayService" check="false" />
</beans>
總結(jié)
在Dubbo中,一個服務(wù)可以向多個注冊中心同時注冊,不同服務(wù)可以分別注冊到不同的注冊中心上去。
dubbo的多注冊中心應(yīng)用