當前位置:首頁 » 編程語言 » java的zookeeper

java的zookeeper

發布時間: 2023-09-17 05:45:24

1. java連接zookeeper集群,必須配置多個ip嗎

zookeeper的集群一般都是奇數,多採用三台伺服器,就是一個leader,兩個follower的模式,你只填一個IP,那就是單機模式

2. java項目打成war後,項目中用到的zookeeper或mq等服務需要再安裝嗎

肯定需要啊。目前沒有那哪種編譯器是內置了zookeeper和mq的,只是提供了對應的驅動和檢測功能。另外,在你的編譯器上運行時肯定也是需要另外啟動zk和mq的,打包的時候是不會把單獨的第三方程序打包進去的。

3. java連接zookeeper的時候報錯,請問下是什麼原因啊

常見錯誤日誌如下:
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss

1. 原因:
是因為ZooKeeper建立連接時採用非同步操作,連接操作後並不能保證ZK連接已成功。如果在ZK連接成功前的這個小時間窗口去訪問ZK,就會碰到如上錯誤。
2. 解決思路
我們在新建ZK連接後要等一段時間,保證連接成功後再訪問ZK。

3. 網上比較贊同的解決方案:
主要利用兩個Java類:

(1)java.util.concurrent.CountDownLatch:
一個同步輔助類,類似倒數計數,直到計數器為0時才能對資源「解鎖」。未解鎖前等待該資源的進程只能被阻塞。

主要方法:
public CountDownLatch(int count); /* 構造函數,參數指定計數次數 */
public void countDown(); /* 當前線程調用此函數,則計數減一 */
public void await() throws InterruptedException; /* 此函數會一直阻塞當前線程,直到計時器的值為0為止 */

(2)org.apache.zookeeper.Watcher
ZooKeeper有一個很有用的功能,就是集群上每一個變化都可以通知到自定義的Watchcer。

4. zookeeper怎麼用java創建臨時節點

基本操作
下面給出基本的操作 ZooKeeper 的示例代碼,這樣你就能對 ZooKeeper 有直觀的認識了。下面的清單包括了創建與 ZooKeeper 伺服器的連接以及最基本的數據操作:

ZooKeeper 基本的操作示例

// 創建一個與伺服器的連接
ZooKeeper zk = new ZooKeeper("localhost:" + CLIENT_PORT,
ClientBase.CONNECTION_TIMEOUT, new Watcher() {
// 監控所有被觸發的事件
public void process(WatchedEvent event) {
System.out.println("已經觸發了" + event.getType() + "事件!");
}
});
// 創建一個目錄節點
zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
// 創建一個子目錄節點
zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),
Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testRootPath",false,null)));
// 取出子目錄節點列表
System.out.println(zk.getChildren("/testRootPath",true));
// 修改子目錄節點數據
zk.setData("/testRootPath/testChildPathOne","modifyChildDataOne".getBytes(),-1);
System.out.println("目錄節點狀態:["+zk.exists("/testRootPath",true)+"]");
// 創建另外一個子目錄節點
zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(),
Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testRootPath/testChildPathTwo",true,null)));
// 刪除子目錄節點
zk.delete("/testRootPath/testChildPathTwo",-1);
zk.delete("/testRootPath/testChildPathOne",-1);
// 刪除父目錄節點
zk.delete("/testRootPath",-1);
// 關閉連接
zk.close();

輸出的結果如下:

已經觸發了 None 事件!
testRootData
[testChildPathOne]
目錄節點狀態:[5,5,,,0,1,0,0,12,1,6]
已經觸發了 NodeChildrenChanged 事件!
testChildDataTwo
已經觸發了 NodeDeleted 事件!
已經觸發了 NodeDeleted 事件!

當對目錄節點監控狀態打開時,一旦目錄節點的狀態發生變化,Watcher 對象的 process 方法就會被調用。

熱點內容
iphone6如何刪除緩存 發布:2025-02-02 08:33:06 瀏覽:829
為什麼路由器的密碼是五位數 發布:2025-02-02 08:32:30 瀏覽:719
怎樣編程選股 發布:2025-02-02 08:22:02 瀏覽:417
電腦web應用伺服器 發布:2025-02-02 08:05:31 瀏覽:811
電腦存儲內存多少合適 發布:2025-02-02 08:00:15 瀏覽:110
登錄界面android 發布:2025-02-02 07:53:23 瀏覽:842
編譯時註解與運行時註解 發布:2025-02-02 07:53:14 瀏覽:818
怎樣登陸ftp 發布:2025-02-02 07:44:44 瀏覽:637
瘋狂點擊腳本 發布:2025-02-02 07:38:10 瀏覽:73
pss演算法 發布:2025-02-02 07:30:55 瀏覽:748