Multicast 註冊中心不須要啓動任何中心節點,只要廣播地址同樣,就能夠互相發現。html
unicast=false
,則廣播給訂閱者組播受網絡結構限制,只適合小規模應用或開發階段使用。組播地址段: 224.0.0.0 - 239.255.255.255git
配置github
<dubbo:registry address="multicast://224.5.6.7:1234" />
或redis
<dubbo:registry protocol="multicast" address="224.5.6.7:1234" />
爲了減小廣播量,Dubbo 缺省使用單播發送提供者地址信息給消費者,若是一個機器上同時啓了多個消費者進程,消費者需聲明 unicast=false,不然只會有一個消費者能收到消息:spring
<dubbo:registry address="multicast://224.5.6.7:1234?unicast=false" />
或數據庫
<dubbo:registry protocol="multicast" address="224.5.6.7:1234">
<dubbo:parameter key="unicast" value="false" />
</dubbo:registry>
Zookeeper 是 Apacahe Hadoop 的子項目,是一個樹型的目錄服務,支持變動推送,適合做爲 Dubbo 服務的註冊中心,工業強度較高,可用於生產環境,並推薦使用 1。apache
流程說明:服務器
支持如下功能:網絡
使用數據結構
在 provider 和 consumer 中增長 zookeeper 客戶端 jar 包依賴:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.3</version>
</dependency>
Dubbo 支持 zkclient 和 curator 兩種 Zookeeper 客戶端實現:
使用 zkclient 客戶端
從 2.2.0 版本開始缺省爲 zkclient 實現,以提高 zookeeper 客戶端的健狀性。zkclient 是 Datameer 開源的一個 Zookeeper 客戶端實現。
缺省配置:
<dubbo:registry ... client="zkclient" />
或:
dubbo.registry.client=zkclient
或:
zookeeper://10.20.153.10:2181?client=zkclient
需依賴或直接下載:
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
使用 curator 客戶端
從 2.3.0 版本開始支持可選 curator 實現。Curator 是 Netflix 開源的一個 Zookeeper 客戶端實現。
若是須要改成 curator 實現,請配置:
<dubbo:registry ... client="curator" />
或:
dubbo.registry.client=curator
或:
zookeeper://10.20.153.10:2181?client=curator
需依賴或直接下載:
<dependency>
<groupId>com.netflix.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>1.1.10</version>
</dependency>
Zookeeper 單機配置:
<dubbo:registry address="zookeeper://10.20.153.10:2181" />
或:
<dubbo:registry protocol="zookeeper" address="10.20.153.10:2181" />
Zookeeper 集羣配置:
<dubbo:registry address="zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181" />
或:
<dubbo:registry protocol="zookeeper" address="10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181" />
同一 Zookeeper,分紅多組註冊中心:
<dubbo:registry id="chinaRegistry" protocol="zookeeper" address="10.20.153.10:2181" group="china" />
<dubbo:registry id="intlRegistry" protocol="zookeeper" address="10.20.153.10:2181" group="intl" />
zookeeper 安裝
安裝方式參見: Zookeeper安裝手冊,只需搭一個原生的 Zookeeper 服務器,並將 Quick Start 中 Provider 和 Consumer 裏的 conf/dubbo.properties 中的 dubbo.registry.addrss 的值改成 zookeeper://127.0.0.1:2181 便可使用。
可靠性聲明
阿里內部並無採用 Zookeeper 作爲註冊中心,而是使用本身實現的基於數據庫的註冊中心,即:Zookeeper 註冊中心並無在阿里內部長時間運行的可靠性保障,此 Zookeeper 橋接實現只爲開源版本提供,其可靠性依賴於 Zookeeper 自己的可靠性。
兼容性聲明
因 2.0.8 最初設計的 zookeeper 存儲結構不能擴充不一樣類型的數據,2.0.9 版本作了調整,因此不兼容,需所有改用 2.0.9 版本才行,之後的版本會保持兼容 2.0.9。2.2.0 版本改成基於 zkclient 實現,需增長 zkclient 的依賴包,2.3.0 版本增長了基於 curator 的實現,做爲可選實現策略。
基於 Redis(是一個高效的 KV 存儲服務器)實現的註冊中心(從 2.1.0 版本開始支持) 。
使用 Redis 的 Key/Map 結構存儲數據結構:
使用 Redis 的 Publish/Subscribe 事件通知數據變動:
調用過程:
配置
<dubbo:registry address="redis://10.20.153.10:6379" />
或
<dubbo:registry address="redis://10.20.153.10:6379?backup=10.20.153.11:6379,10.20.153.12:6379" />
或
<dubbo:registry protocol="redis" address="10.20.153.10:6379" />
或
<dubbo:registry protocol="redis" address="10.20.153.10:6379,10.20.153.11:6379,10.20.153.12:6379" />
選項
可靠性聲明
阿里內部並無採用 Redis 作爲註冊中心,而是使用本身實現的基於數據庫的註冊中心,即:Redis 註冊中心並無在阿里內部長時間運行的可靠性保障,此 Redis 橋接實現只爲開源版本提供,其可靠性依賴於 Redis 自己的可靠性。
Simple 註冊中心自己就是一個普通的 Dubbo 服務,能夠減小第三方依賴,使總體通信方式一致。
配置
將 Simple 註冊中心暴露成 Dubbo 服務:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 當前應用信息配置 -->
<dubbo:application name="simple-registry" />
<!-- 暴露服務協議配置 -->
<dubbo:protocol port="9090" />
<!-- 暴露服務配置 -->
<dubbo:service interface="com.alibaba.dubbo.registry.RegistryService" ref="registryService" registry="N/A" ondisconnect="disconnect" callbacks="1000">
<dubbo:method name="subscribe"><dubbo:argument index="1" callback="true" /></dubbo:method>
<dubbo:method name="unsubscribe"><dubbo:argument index="1" callback="false" /></dubbo:method>
</dubbo:service>
<!-- 簡單註冊中心實現,可自行擴展實現集羣和狀態同步 -->
<bean id="registryService" class="com.alibaba.dubbo.registry.simple.SimpleRegistryService" />
</beans>
引用 Simple Registry 服務:
<dubbo:registry address="127.0.0.1:9090" />
或者:
<dubbo:service interface="com.alibaba.dubbo.registry.RegistryService" group="simple" version="1.0.0" ... >
或者:
<dubbo:registry address="127.0.0.1:9090" group="simple" version="1.0.0" />
適用性說明
此 SimpleRegistryService 只是簡單實現,不支持集羣,可做爲自定義註冊中心的參考,但不適合直接用於生產環境。
參考:
http://dubbo.io/books/dubbo-user-book/references/registry/introduction.html