聊聊、Zookeeper 客戶端 ZkClient


【ZkClient】 

 ZkClient 是 GitHub 上一個開源的客戶端,如果我們用 Maven 來管理工程,則引用如下。

 <dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>3.4.10</version>
 </dependency>
 <dependency>
	<groupId>com.github.sgroschupf</groupId>
	<artifactId>zkclient</artifactId>
	<version>0.1</version>
 </dependency>

 

 創建連接

  • public ZkClient(String serverstring)
  • public ZkClient(String serverstring,int connectionTimeout)
  • public ZkClient(String serverstring,int sessionTimeout,int connectionTimeout)
  • public ZkClient(String serverstring,int sessionTimeout,int connectionTimeout,ZkSerializer zkSerializer)
  • public ZkClient(IZkConnection connection)
  • public ZkClient(IZkConnection connection,int connectionTimeout)
  • public ZkClient(IZkConnection connection,int connectionTimeout,ZkSerializer zkSerializer)

 

package zookeeper.zkclient;

import org.I0Itec.zkclient.ZkClient;

public class OpenZkClient {

	public static void main(String[] args) {
		
		ZkClient client = new ZkClient("127.0.0.1:2181",5000);
		System.out.println(client.getChildren("/"));
		
	}
	
}

 簡單來說,開源客戶端相對於原 API,主要是將比較繁瑣注冊,刪除節點不能有子節點,新增節點必須有父節點,等等一些容易出錯的地方進行封裝。封裝以后程序員開發的時候就可以不 用考慮這些小的細節,從而提高開發效率。

 還是來說說構造器參數的含義:

 serverstring 可以指定單個服務器地址也可以是多個,這個和原 API 創建連接構造參數是一樣的含義。

 connectionTimeout,sessionTimeout 是連接超時時間和會話超時時間。單位都是毫秒,其中會話默認是 30000 毫秒,也就是 30 秒。

 connection 是 IZkConnection 的接口實現類。

 zkSerializer 自定義的序列化器,關於序列化和反序列化是一個很大的話題,有 Java 自帶的序列化工具,也有很多開源的序列化工具,以后會寫一章序列化。

 

 創建節點

  •  String create(final String path,Object data,final CreateMode mode)
  •  String create(final String path,Object data,final List<ACL> acl,final CreateMode mode)
  •  void create(final String path,Object data,final CreateMode mode,final AsyncCallback.StringCallback callback,final Object data)
  •  void createEphemeral(final String path)
  •  void createEphemeral(final String path,final Object data)
  •  void createPersistent(String path)
  •  void createPersistent(String path,boolean createParents)
  •  void createPersistent(String path,Object data)
  •  void createPersistent(String path,List<ACL> acl,Object data)
  •  void createPersistentSequential(String path,Object data)
  •  void createEphemeralSequential(final String path,final Object data)

 創建節點和原生 API 相比,原生只能傳 byte 數組,這里可以傳 Object。而且父節點不存在可以指定是否創建。

 

 刪除節點

  •  boolean delete(final String path)
  •  delete(final String path,final AsyncCallback.VoidCallback callback,final Object context)
  •  boolean deleteRecursive(String path)

 說一下 deleteRecursive,原生 API 刪除節點如果有子節點則必須把子節點都刪掉才可以,這里的函數則不需要,它會自動刪除所有的子節點。

 

 讀取數據

 (一)、getChildren

  •  List<String> getChildren(String path)

 (二)、getData

  •  <T extends Object> T readData(String path)
  •  <T extends Object> T readData(String path,boolean returnNullIfPathNotExists)
  •  <T extends Object> T readData(String path,Stat stat)

 這里說一下 returnNullIfPathNotExists,原生 API 讀取數據,如果 path 不存在就會報錯,這里設置 returnNullIfPathNotExists 為 true 則不會報錯,會返回 null。

 

 更新數據

  •  void writeData(String path,Object data)
  •  void writeData(final String path,Object data,final int expectedVersion)

 

 檢測節點是否存在

  •  boolean exists(final String path)

 

 謝謝大家觀看!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM