Java操作方法Zookeeper

5565 ワード

概要
Java操作Zookeeperには、zookeeper、zkclient、curatorなど、zkclientを使ってZookeeperを操作する方法がたくさんあります。
Maven依存:

<dependency>
	<groupId>com.101tec</groupId>
	<artifactId>zkclient</artifactId>
	<version>0.11</version>
</dependency>
zkclientを使ってZookeeperを操作します。
作成ノード:

@Test
public void testCreateNode() {
	//    
	//zkServers: Zookeeper   IP      ,               Zookeeper     
	//sessionTimeout:       
	//connectionTimeout:       
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);

	//    
	Student student = new Student();
	student.setName("  ");
	student.setAge(18);
	student.setPhone("1585454xxxx");

	//      
	zkClient.createPersistent("/p_node", student);
	//        
	zkClient.createPersistentSequential("/ps_node", student);
	//      
	zkClient.createEphemeral("/e_node", student);
	//        
	zkClient.createEphemeralSequential("/ps_node", student);

	//     
	//        ,              
	zkClient.close();
}
ノードデータを読み出す:

@Test
public void testReadNodeData() {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);

	Stat stat = new Stat();
	Student student = zkClient.readData("/p_node", stat);
	System.out.println("      :" + JSON.toJSONString(student));
	System.out.println("    :" + JSON.toJSONString(stat));

	zkClient.close();
}
//    :
//      :{"age":18,"name":"  ","phone":"1585454xxxx"}
//    :{"aversion":0,"ctime":1619165355431,"cversion":0,"czxid":165,"dataLength":260,"ephemeralOwner":0,"mtime":1619165355431,"mzxid":165,"numChildren":0,"pzxid":165,"version":0}
ノードを削除:

@Test
public void testDeleteNode() {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);

	//    ,            
	zkClient.delete("/p_node");
	//    ,          
	zkClient.deleteRecursive("/p_node2");

	zkClient.close();
}
ノードデータを更新:

@Test
public void testWriteNodeData() {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);

	//      
	zkClient.writeData("/p_node", "myData1");
	//  CAS      
	//zkClient.writeData("/p_node", "myData2", 1);

	zkClient.close();
}
サブノードのリストを取得:

@Test
public void testGetChildNodes() {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);

	//       
	List<String> childList = zkClient.getChildren("/p_node");
	childList.stream().forEach(System.out::println);

	zkClient.close();
}
ノード傍受
Javaノードの傍受はすべて永久的で、トリガは一回後に削除されません。
傍受ノードのサブノードの変化:

@Test
public void testSubscribeChildChanges() throws IOException {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);
	zkClient.subscribeChildChanges("/p_node", new IZkChildListener(){

		//        
		@Override
		public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
			System.out.println(parentPath + "       ");
			System.out.println("       :" + currentChilds);
		}

	});

	//     ,    
	System.in.read();
}
傍受ノードのデータ変化:

@Test
public void testSubscribeDataChanges() throws IOException {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);
	zkClient.subscribeDataChanges("/p_node", new IZkDataListener(){

		//         
		@Override
		public void handleDataChange(String dataPath, Object data) throws Exception {
			System.out.println(dataPath + "        ");
			System.out.println("       :" + data.toString());
		}

		//        
		@Override
		public void handleDataDeleted(String dataPath) throws Exception {
			System.out.println(dataPath + "      ");
		}
	});

	//     ,    
	System.in.read();
}
Zookeeper接続状態の変化をモニターする:

@Test
public void testSubscribeStateChanges() throws IOException {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);
	zkClient.subscribeStateChanges(new IZkStateListener(){

		// zookeeper         
		@Override
		public void handleStateChanged(Watcher.Event.KeeperState state) throws Exception {
			System.out.println("    " + state);
		}

		// zookeeper                   
		@Override
		public void handleNewSession() throws Exception {
			System.out.println("    ,       ");
		}

		//            
		@Override
		public void handleSessionEstablishmentError(Throwable error) throws Exception {
			error.printStackTrace();
		}
	});

	//     ,    
	System.in.read();
}
以上はJavaを使ってZookeeperを操作する方法の詳細です。Java操作Zookeeperに関する資料は他の関連記事に注目してください。