zookeeper curator 服务注册
https://fobject.iteye.com/blog/2294728
Zookeeper & Curator 服務注冊?
curator是最簡單的Zookeeper客戶端?
Curator主要組件?
Recipes?? (擴展:包括分布式鎖、隊列、選舉等)?
Framework? (框架)?
Utilities? (工具)?
Client (客戶端)?
Errors? (錯誤處理)?
另外Curator提供了一些擴展庫,比如用于服務注冊的curator-x-discovery?
服務定義? ServiceInstance?
Curator 中使用可以使用ServiceInstance作為服務定義對象?
通常一個服務對象具有服務名、服務id、地址、端口和有效數據等屬性,?
下面就是ServiceInstance類的變量定義。?
服務注冊過程就是將ServiceInstance實例寫到Zookeeper層次結構中,服務名name會生成一個ZkNode,id會生成這個name下孩子節點,在注冊的時候會指定根路徑,所以注冊之后的服務在zookeeper中如下圖所示?
根路徑(注冊時指定)?
|_____name1 //服務名1?
|??????? |______id1->序列化ServiceInstance1?
| |______id2->序列化ServiceInstance2?
|?
|_____name2 //服務名2?
|??????? |______id1->序列化ServiceInstance1?
| |______id2->序列化ServiceInstance2?
|?
可以先通過客戶端連接到本地zookeeper查看下具體的服務注冊情況,其注冊在/###/services/路徑下,會發現有很多服務,再進服務查看可以看到這個服務下有多少個實例,其節點為其id(如果服務未設置id,使用的是默認隨機生成的字符串)。?
要注意到是服務在注冊時生成的name服務名節點是持久的節點,而服務名下面的實例id節點是臨時節點,正常服務結束,可以通過提供的相關api來刪除對應的節點,臨時節點能保證注冊服務的程序異常退出或失去連接后也能做到將服務節點摘除。?
構造服務實例的方法很簡單,可以通過ServiceInstance的build方法進行建造。?
在練習中定義了一個簡單的服務業務類XServInstance?
建造ServiceInstance的代碼如下:?
服務注冊? ServiceDiscovery?
Curator使用ServiceDiscovery進行服務注冊,可以把它認為是服務管理中心,通過它也能查找我們的服務。ServiceDiscovery同樣采用建造者方式,由ServiceDiscoveryBuilder進行構造,在構造完成之后需要調用start方法!SERV_PAHT指定我們服務需要注冊在zookeeper的哪個目錄?
client是curator的zookeeper客戶端,通過下面方式構造:?
注冊服務的代碼就一行:?
此時服務已注冊,在程序未退出時查看SERV_PATH下的內容即注冊服務serviceInstance的name,再下一層就是id了,如果同一個服務注冊了多個,則會有多個id(注冊id相同只會有一個)。退出程序之后,由其注冊的id也就沒了。?
ServiceDiscovery除了注冊服務,同時也能查詢服務,其三個主要的查詢方法如下:?
- +? Collection<String> queryForNames()? //查詢所有服務名?
?
- +? Collection<ServiceInstance<T>>? queryForInstances(String name)? //查詢指定服務名下的所有服務實例?
?
- +? ServiceInstance<T> queryForInstance(String name, String id)????? //根據服務名和id查詢服務實例?
服務提供? ServiceProvider?
這一步是Curator自帶的服務提供方式,也可以不采用自帶的服務提供者,而是通過ServiceDiscovery查詢(queryForInstances)到服務之后,通過自己的策略進行服務選擇(后期待續)。這里直接使用curator現成的服務提供者。?
服務提供者的構造通過serviceDiscovery內部的建造者方法進行構造,同樣必須先start?
需要注意的是providerStrategy提供策略,對服務提供者設置一個服務選擇策略,因為同一個服務名下有很多具體服務實例,具體選擇哪一個可以由該策略決定:?
常用的有RoundRobinStrategy 輪詢,RandomStrategy 隨機選擇 ,StickyStrategy 粘性策略(總是選擇同一個,沒試過比較特殊,可能適用于某些服務調用者和提供者需要記錄什么調用記錄的情況下吧)?
獲取一個服務通過以下方式進行獲取?
.?
最后附上本練習簡單的服務注冊中心代碼和測試代碼?
Test?
轉載于:https://www.cnblogs.com/davidwang456/articles/10600349.html
總結
以上是生活随笔為你收集整理的zookeeper curator 服务注册的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阅读源代码的一点小技巧
- 下一篇: solr查询特殊字符的处理