2015-04-01 29 views
1

我有很多服務連接到zookeeper,並且我想要那個服務A可以獲得服務B的IP,當服務B連接到zookeeper時,有沒有API可以做到這一點?或者我必須使用其他配置文件來記錄所有服務的IP?如何獲得znode ip

回答

1

看看是否能解決你的問題: http://curator.apache.org/curator-x-discovery/

動物園管理員不提供服務發現開箱即用,但它很容易實現它自己。

您將無法直接從Zookeeper API獲取其他連接客戶端(服務,在您的情況下)的IP地址。爲了獲得連接到集羣的其他服務,每個服務必須在特定路徑下單獨創建臨時znode,例如, /服務,並將必要的尋址和命名信息設置爲znode的數據(IP,端口等)。這樣,您可以列出該路徑並發現活動服務,或者查看服務配置中任何更改的/服務路徑。

由於服務正在創建臨時節點,因此一旦它們斷開連接並且它們的會話過期,它們將自動被刪除。當然,一旦你開始做這樣的事情,你會發現你必須做很多小細節和設計決策,而不是已經提到的Curator配方。

+0

謝謝你的回答:),目前,我做了你所說的,每個服務都創建了一個特定路徑下的短暫znode,除了我沒有將服務ip放入znode數據,只是想知道zookeeper api可以幫助我獲得IP或我必須將自己的IP地址設置爲znode數據?如果zookeeper可以爲我提供znode ip,部署將更容易:),因爲我不必在配置文件中設置IP地址,或者通過代碼獲取IP地址。 – Endlesscode 2015-04-02 02:27:14

+0

另外,我需要IP地址,因爲服務A和服務B必須使tcp連接進行通信。 – Endlesscode 2015-04-02 02:31:15

+0

據我所知,Zookeeper沒有提供這個,你不能得到創建znode的客戶端的IP地址。你真的需要自己把它放在znode數據中。不知道你的具體配置問題是什麼,但一般來說,每個服務在向Zookeper註冊時都應該發佈自己的尋址信息,無論是IP還是cname或其他。 – igorbel 2015-04-02 10:13:34