java連接zookeeper的3種方式小結
更新時間:2021年11月11日 09:02:39 作者:碼眼
這篇文章主要介紹了java連接zookeeper的3種方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
java連接zookeeper3種方式
1、使用zookeeper原始api
public class Demo {
private static String ip = "192.168.0.101:2181";
private static int session_timeout = 40000;
private static CountDownLatch latch = new CountDownLatch(1);
public static void main(String[] args) throws Exception {
ZooKeeper zooKeeper = new ZooKeeper(ip, session_timeout, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
if(watchedEvent.getState() == Event.KeeperState.SyncConnected) {
//確認已經連接完畢后再進行操作
latch.countDown();
System.out.println("已經獲得了連接");
}
}
});
//連接完成之前先等待
latch.await();
ZooKeeper.States states = zooKeeper.getState();
System.out.println(states);
}
}
打?。?/p>

如果打印出來的狀態(tài)為 CONNECTED 則表示連接成功
2、使用ZkClient客戶端連接,這種連接比較簡單
public class ZkClientTest {
private static String ip = "192.168.0.101:2181";
private static int session_timeout = 40000;
public static void main(String[] args) {
ZkClient zkClient = new ZkClient(ip,session_timeout);
System.out.println(zkClient.getChildren("/"));
}
}
打?。?/strong>

3、使用curator連接
public class CuratorDemo {
//ZooKeeper服務地址
private static final String SERVER = "192.168.0.101:2181";
//會話超時時間
private static final int SESSION_TIMEOUT = 30000;
//連接超時時間
private static final int CONNECTION_TIMEOUT = 5000;
/**
* baseSleepTimeMs:初始的重試等待時間
* maxRetries:最多重試次數
*
*
* ExponentialBackoffRetry:重試一定次數,每次重試時間依次遞增
* RetryNTimes:重試N次
* RetryOneTime:重試一次
* RetryUntilElapsed:重試一定時間
*/
private static final RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
public static void main(String[] args) throws Exception {
//創(chuàng)建 CuratorFrameworkImpl實例
CuratorFramework client = CuratorFrameworkFactory.newClient(SERVER, SESSION_TIMEOUT, CONNECTION_TIMEOUT, retryPolicy);
//啟動
client.start();
System.out.println("連接成功!");
Object o = client.getChildren().forPath("/");
System.out.println(o);
}
}
打?。?/p>

Java集成zookeeper筆記
一、引入zookeeper-3.4.5.jar(原生zk包)
slf4j.jar即可,其他還有zkClient和Curator,其中Curator封裝的zk客戶端組件最好用。
二、手寫ZookeeperBase.java
少廢話,上代碼:
簡單的創(chuàng)建連接和增刪改查操作:
public class ZookeeperBase{
//zk集群地址(端口號為客戶端端口號)
private static final String CONNECT_ADDR = "192.168.241.127:2181,192.168.241.128:2181,192.168.241.129:2181";
//session 超時時間,單位毫秒
private static final int SESSION_OUTTIME = 5000;
//用于阻塞程序執(zhí)行,直到zk成功連接后再發(fā)送繼續(xù)執(zhí)行信號,因為zk建立連接是異步的,阻塞是防止程序在zk成功連接前被調用。
private static final CountDownLatch contectedSemaphore = new CountDownLatch (1);
public static void main(String[] args)throws Exception{
Zookeeper zk = new Zookeeper(CONNECT_ADDR,SESSION_OUTTIME,new Watcher()){
@override
public void process(WatcherEvent event){ //WatcherEvent為觀察者監(jiān)聽事件
//獲取事件狀態(tài)(與客戶端連接狀態(tài)相關)
/*
* KeeperState:Disconneced 連接失敗
* KeeperState:SyncConnected 連接成功
* KeeperState:AuthFailed 認證失敗
* KeeperState:Expired 會話過期
*/
KeeperState keeperState = event.getState();
//獲取事件類型(與zknode相關)
/*
* EventType:NodeCreated 節(jié)點創(chuàng)建
* EventType:NodeDataChanged 節(jié)點的數據變更
* EventType:NodeChildrentChanged 子節(jié)點下的數據變更
* EventType:NodeDeleted 節(jié)點刪除
* EventType:None 剛連接什么都沒做
*/
EventType eventType = event.getType();
//成功建立連接(固定寫法)
if(KeeperState.SyncConnected == keeperState){
if(EventType.None == eventType){
//發(fā)送信號讓程序繼續(xù)執(zhí)行
contectedSemaphore.countDown();
}
}
}
//阻塞程序執(zhí)行
contectedSemaphore.await();
//創(chuàng)建節(jié)點
//同步創(chuàng)建
String newNode = zk.create("/testRoot","data".getBytes(),ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
/*
*參數1:節(jié)點路徑:/testRoot,原生api不允許遞歸創(chuàng)建節(jié)點,即沒有父節(jié)點不允許直接連帶父子節(jié)點一起創(chuàng)建。創(chuàng)建節(jié)點是要寫全路徑,例如:/testRoot/children。
*參數2:節(jié)點內容:內容類型為字節(jié)數組,不支持存儲序列化對象,例如不支持將java對象序列化為json存儲,但可以使用java序列化框架,如hession或kyso。
*參數3:權限控制:在對權限要求不嚴格情況下都使用OPEN_ACL_UNSAFE開放權限即可。
*參數4:節(jié)點類型:提供了四種類型。
*PERSISTENT 持久化節(jié)點
*PERSISTENT SEQUENTIAL 持久順序節(jié)點
*EPHEMERAL 臨時節(jié)點
*EPHEMERAL SEQUENTIAL 臨時順序節(jié)點
*/
};
}
}
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
jdk17+springboot使用webservice的踩坑實戰(zhàn)記錄
這篇文章主要給大家介紹了關于jdk17+springboot使用webservice踩坑的相關資料,網上很多教程是基于jdk8的,所以很多在17上面跑不起來,折騰兩天,直接給答案,需要的朋友可以參考下2024-01-01
SpringBoot配置Profile實現多環(huán)境支持
這篇文章主要介紹了SpringBoot配置Profile實現多環(huán)境支持操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
解決spring boot hibernate 懶加載的問題
這篇文章主要介紹了解決spring boot hibernate 懶加載的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
解決SpringMvc中普通類注入Service為null的問題
這篇文章主要介紹了解決SpringMvc中普通類注入Service為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Java之SpringCloud Eurka注冊錯誤解決方案
這篇文章主要介紹了Java之SpringCloud Eurka注冊錯誤解決方案,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-07-07

