Zookeeper原生API實現簡易版生成唯一ID
/**
* @Author: zxx
* @Date: 2020/3/30 21:43
* @Description: 生成唯一ID
*/
public class ZKUniqueID implements Watcher{
// 計數器對象
public static CountDownLatch countDownLatch=new CountDownLatch(1);
// 連接對象
public static ZooKeeper zooKeeper;
private String IP = "192.168.21.141:2181";
// 用戶生成序號的節點
String defaultPath = "/uniqueId";
public ZKUniqueID() throws Exception {
zooKeeper = new ZooKeeper(IP, 6000, this);
countDownLatch.await();
}
public void process(WatchedEvent watchedEvent) {
try {
//EventType = None時
if (watchedEvent.getType() == Watcher.Event.EventType.None){
if (watchedEvent.getState() == Watcher.Event.KeeperState.SyncConnected){
System.out.println("連接成功");
countDownLatch.countDown();
}else if (watchedEvent.getState() == Watcher.Event.KeeperState.Disconnected){
System.out.println("斷開連接");
}else if (watchedEvent.getState() == Watcher.Event.KeeperState.Expired){
System.out.println("會話超時");
}else if (watchedEvent.getState() == Watcher.Event.KeeperState.AuthFailed){
System.out.println("認證失敗");
}
}
}catch (Exception e){
e.printStackTrace();
}
}
public String getUniqueID() {
String path ="";
//創建臨時有序節點
try {
path = zooKeeper.create(defaultPath,new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return path.substring(8);
}
@Test
public void test() throws Exception {
ZKUniqueID zkUniqueID = new ZKUniqueID();
for(int i=0 ;i<3;i++){
System.out.println(zkUniqueID.getUniqueID());
}
}
}