
建議使用dubbo-2.3.3以上版本的zookeeper注冊中心用戶端

zookeeper說明

zookeeper安裝
可靠性聲明
阿裡内部并沒有采用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的實作,作為可選實作政策。
流程說明:
服務提供者啟動時
向/dubbo/com.foo.barservice/providers目錄下寫入自己的url位址。
服務消費者啟動時
訂閱/dubbo/com.foo.barservice/providers目錄下的提供者url位址。
并向/dubbo/com.foo.barservice/consumers目錄下寫入自己的url位址。
監控中心啟動時
訂閱/dubbo/com.foo.barservice目錄下的所有提供者和消費者url位址。
支援以下功能:
當提供者出現斷電等異常停機時,注冊中心能自動删除提供者資訊。(臨時節點?會話失效,自動删除)
當注冊中心重新開機時,能自動恢複注冊資料,以及訂閱請求。
當會話過期時,能自動恢複注冊資料,以及訂閱請求。
當設定<dubbo:registry check="false" />時,記錄失敗注冊和訂閱請求,背景定時重試。
可通過<dubbo:registry username="admin" password="1234" />設定zookeeper登入資訊。
可通過<dubbo:registry group="dubbo" />設定zookeeper的根節點,不設定将使用無根樹。
支援*号通配符<dubbo:reference group="*" version="*" />,可訂閱服務的所有分組和所有版本的提供者。
在provider和consumer中增加zookeeper用戶端jar包依賴:
<code><</code><code>dependency</code><code>></code>
<code> </code><code><</code><code>groupid</code><code>>org.apache.zookeeper</</code><code>groupid</code><code>></code>
<code> </code><code><</code><code>artifactid</code><code>>zookeeper</</code><code>artifactid</code><code>></code>
<code> </code><code><</code><code>version</code><code>>3.3.3</</code><code>version</code><code>></code>
<code></</code><code>dependency</code><code>></code>
支援zkclient和curator兩種zookeeper用戶端實作:
從2.2.0版本開始預設為zkclient實作,以提升zookeeper用戶端的健狀性。

預設配置:
<code><</code><code>dubbo:registry</code> <code>...</code><code>client</code><code>=</code><code>"zkclient"</code> <code>/></code>
或:
<code>dubbo.registry.client=zkclient</code>
<code>zookeeper://10.20.153.10:2181?client=zkclient</code>
需依賴:
<code> </code><code><</code><code>groupid</code><code>>com.github.sgroschupf</</code><code>groupid</code><code>></code>
<code> </code><code><</code><code>artifactid</code><code>>zkclient</</code><code>artifactid</code><code>></code>
<code> </code><code><</code><code>version</code><code>>0.1</</code><code>version</code><code>></code>
從2.3.0版本開始支援可選curator實作。

如果需要改為curator實作,請配置:
<code><</code><code>dubbo:registry</code> <code>...</code><code>client</code><code>=</code><code>"curator"</code> <code>/></code>
<code>dubbo.registry.client=curator</code>
<code>zookeeper://10.20.153.10:2181?client=curator</code>
<code> </code><code><</code><code>groupid</code><code>>com.netflix.curator</</code><code>groupid</code><code>></code>
<code> </code><code><</code><code>artifactid</code><code>>curator-framework</</code><code>artifactid</code><code>></code>
<code> </code><code><</code><code>version</code><code>>1.1.10</</code><code>version</code><code>></code>
zookeeper單機配置:
<code><</code><code>dubbo:registry</code> <code>address</code><code>=</code><code>"zookeeper://10.20.153.10:2181"</code> <code>/></code>
or:
<code><</code><code>dubbo:registry</code> <code>protocol</code><code>=</code><code>"zookeeper"</code> <code>address</code><code>=</code><code>"10.20.153.10:2181"</code> <code>/></code>
zookeeper叢集配置:
<code><</code><code>dubbo:registry</code> <code>address</code><code>=</code><code>"zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181"</code> <code>/></code>
<code><</code><code>dubbo:registry</code> <code>protocol</code><code>=</code><code>"zookeeper"</code> <code>address</code><code>=</code><code>"10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181"</code> <code>/></code>
同一zookeeper,分成多組注冊中心:
<code><</code><code>dubbo:registry</code> <code>id</code><code>=</code><code>"chinaregistry"</code> <code>protocol</code><code>=</code><code>"zookeeper"</code> <code>address</code><code>=</code><code>"10.20.153.10:2181"</code> <code>group</code><code>=</code><code>"china"</code> <code>/></code>
<code><</code><code>dubbo:registry</code> <code>id</code><code>=</code><code>"intlregistry"</code> <code>protocol</code><code>=</code><code>"zookeeper"</code> <code>address</code><code>=</code><code>"10.20.153.10:2181"</code> <code>group</code><code>=</code><code>"intl"</code> <code>/></code>

redis說明

redis安裝
redis過期資料
通過心跳的方式檢測髒資料,伺服器時間必須相同,并且對伺服器有一定壓力。
阿裡内部并沒有采用redis做為注冊中心,而是使用自己實作的基于資料庫的注冊中心,即:redis注冊中心并沒有在阿裡内部長時間運作的可靠性保障,此redis橋接實作隻為開源版本提供,其可靠性依賴于redis本身的可靠性。
從2.1.0版本開始支援
資料結構:
使用redis的key/map結構存儲資料。
主key為服務名和類型。
map中的key為url位址。
map中的value為過期時間,用于判斷髒資料,髒資料由監控中心删除。(注意:伺服器時間必需同步,否則過期檢測會不準确)
使用redis的publish/subscribe事件通知資料變更。
通過事件的值區分事件類型:register, unregister, subscribe, unsubscribe。
普通消費者直接訂閱指定服務提供者的key,隻會收到指定服務的register, unregister事件。
監控中心通過psubscribe功能訂閱/dubbo/*,會收到所有服務的所有變更事件。
調用過程:
服務提供方啟動時,向key:/dubbo/com.foo.barservice/providers下,添加目前提供者的位址。
并向channel:/dubbo/com.foo.barservice/providers發送register事件。
服務消費方啟動時,從channel:/dubbo/com.foo.barservice/providers訂閱register和unregister事件。
并向key:/dubbo/com.foo.barservice/providers下,添加目前消費者的位址。
服務消費方收到register和unregister事件後,從key:/dubbo/com.foo.barservice/providers下擷取提供者位址清單。
服務監控中心啟動時,從channel:/dubbo/*訂閱register和unregister,以及subscribe和unsubsribe事件。
服務監控中心收到register和unregister事件後,從key:/dubbo/com.foo.barservice/providers下擷取提供者位址清單。
服務監控中心收到subscribe和unsubsribe事件後,從key:/dubbo/com.foo.barservice/consumers下擷取消費者位址清單。
選項:
可通過<dubbo:registry group="dubbo" />設定redis中key的字首,預設為dubbo。
可通過<dubbo:registry cluster="replicate" />設定redis叢集政策,預設為failover。
failover: 隻寫入和讀取任意一台,失敗時重試另一台,需要伺服器端自行配置資料同步。
replicate: 在用戶端同時寫入所有伺服器,隻讀取單台,伺服器端不需要同步,注冊中心叢集增大,性能壓力也會更大。
config redis registry:
<code><</code><code>dubbo:registry</code> <code>address</code><code>=</code><code>"redis://10.20.153.10:6379"</code> <code>/></code>
<code><</code><code>dubbo:registry</code> <code>address</code><code>=</code><code>"redis://10.20.153.10:6379?backup=10.20.153.11:6379,10.20.153.12:6379"</code> <code>/></code>
<code><</code><code>dubbo:registry</code> <code>protocol</code><code>=</code><code>"redis"</code> <code>address</code><code>=</code><code>"10.20.153.10:6379"</code> <code>/></code>
<code><</code><code>dubbo:registry</code> <code>protocol</code><code>=</code><code>"redis"</code> <code>address</code><code>=</code><code>"10.20.153.10:6379,10.20.153.11:6379,10.20.153.12:6379"</code> <code>/></code>

dogfooding
注冊中心本身就是一個普通的dubbo服務,可以減少第三方依賴,使整體通訊方式一緻。
适用性說明
此simpleregistryservice隻是簡單實作,不支援叢集,可作為自定義注冊中心的參考,但不适合直接用于生産環境。
export simple registry service:
<code><?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"utf-8"</code><code>?></code>
<code> </code><code><!-- 目前應用資訊配置 --></code>
<code> </code><code><</code><code>dubbo:application</code> <code>name</code><code>=</code><code>"simple-registry"</code> <code>/></code>
<code> </code><code><!-- 暴露服務協定配置 --></code>
<code> </code><code><</code><code>dubbo:protocol</code> <code>port</code><code>=</code><code>"9090"</code> <code>/></code>
<code> </code><code><!-- 暴露服務配置 --></code>
<code> </code><code><</code><code>dubbo:service</code> <code>interface</code><code>=</code><code>"com.alibaba.dubbo.registry.registryservice"</code> <code>ref</code><code>=</code><code>"registryservice"</code> <code>registry</code><code>=</code><code>"n/a"</code> <code>ondisconnect</code><code>=</code><code>"disconnect"</code> <code>callbacks</code><code>=</code><code>"1000"</code><code>></code>
<code> </code><code><</code><code>dubbo:method</code> <code>name</code><code>=</code><code>"subscribe"</code><code>><</code><code>dubbo:argument</code> <code>index</code><code>=</code><code>"1"</code> <code>callback</code><code>=</code><code>"true"</code> <code>/></</code><code>dubbo:method</code><code>></code>
<code> </code><code><</code><code>dubbo:method</code> <code>name</code><code>=</code><code>"unsubscribe"</code><code>><</code><code>dubbo:argument</code> <code>index</code><code>=</code><code>"1"</code> <code>callback</code><code>=</code><code>"false"</code> <code>/></</code><code>dubbo:method</code><code>></code>
<code> </code><code></</code><code>dubbo:service</code><code>></code>
<code> </code><code><!-- 簡單注冊中心實作,可自行擴充實作叢集和狀态同步 --></code>
<code> </code><code><</code><code>bean</code> <code>id</code><code>=</code><code>"registryservice"</code> <code>class</code><code>=</code><code>"com.alibaba.dubbo.registry.simple.simpleregistryservice"</code> <code>/></code>
<code></</code><code>beans</code><code>></code>
reference the simple registry service:
<code><</code><code>dubbo:registry</code> <code>address</code><code>=</code><code>"127.0.0.1:9090"</code> <code>/></code>
<code><</code><code>dubbo:service</code> <code>interface</code><code>=</code><code>"com.alibaba.dubbo.registry.registryservice"</code> <code>group</code><code>=</code><code>"simple"</code> <code>version</code><code>=</code><code>"1.0.0"</code> <code>... ></code>
<code><</code><code>dubbo:registry</code> <code>address</code><code>=</code><code>"127.0.0.1:9090"</code> <code>group</code><code>=</code><code>"simple"</code> <code>version</code><code>=</code><code>"1.0.0"</code> <code>/></code>
原文連結:[http://wely.iteye.com/blog/2333298]