国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

如何使用Java操作Zookeeper

發(fā)布時(shí)間:2021-07-17 21:51 來(lái)源:腳本之家 閱讀:0 作者:布禾 欄目: 編程語(yǔ)言 歡迎投稿:712375056

目錄

簡(jiǎn)介

Java操作Zookeeper有很多種方式,如zookeeper、zkclient、curator等等,下面介紹下使用zkclient的方式操作Zookeeper。

Maven依賴(lài):

<dependency>
	<groupId>com.101tec</groupId>
	<artifactId>zkclient</artifactId>
	<version>0.11</version>
</dependency>

使用zkclient操作Zookeeper

創(chuàng )建節點(diǎn):

@Test
public void testCreateNode() {
	//建立連接
	//zkServers: Zookeeper服務(wù)器IP地址和端口號,如果是集群情況下用逗號分割多個(gè)Zookeeper服務(wù)器地址
	//sessionTimeout: 會(huì )話(huà)超時(shí)時(shí)間
	//connectionTimeout: 連接超時(shí)時(shí)間
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);

	//創(chuàng  )建數據
	Student student = new Student();
	student.setName("張三");
	student.setAge(18);
	student.setPhone("1585454xxxx");

	//創(chuàng  )建持久節點(diǎn)
	zkClient.createPersistent("/p_node", student);
	//創(chuàng  )建持久順序節點(diǎn)
	zkClient.createPersistentSequential("/ps_node", student);
	//創(chuàng  )建臨時(shí)節點(diǎn)
	zkClient.createEphemeral("/e_node", student);
	//創(chuàng  )建臨時(shí)順序節點(diǎn)
	zkClient.createEphemeralSequential("/ps_node", student);

	//關(guān)閉客戶(hù)端
	//關(guān)閉客戶(hù)端的同時(shí),前面創(chuàng  )建的臨時(shí)節點(diǎn)也會(huì )被刪除
	zkClient.close();
}

讀取節點(diǎn)數據:

@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("節點(diǎn)狀態(tài)信息:" + JSON.toJSONString(student));
	System.out.println("節點(diǎn)數據:" + JSON.toJSONString(stat));

	zkClient.close();
}
//輸出結果:
//節點(diǎn)狀態(tài)信息:{"age":18,"name":"張三","phone":"1585454xxxx"}
//節點(diǎn)數據:{"aversion":0,"ctime":1619165355431,"cversion":0,"czxid":165,"dataLength":260,"ephemeralOwner":0,"mtime":1619165355431,"mzxid":165,"numChildren":0,"pzxid":165,"version":0}

刪除節點(diǎn):

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

	//刪除節點(diǎn),不能刪除帶有子節點(diǎn)的節點(diǎn)
	zkClient.delete("/p_node");
	//刪除節點(diǎn),遞歸刪除所有子孫節點(diǎn)
	zkClient.deleteRecursive("/p_node2");

	zkClient.close();
}

更新節點(diǎn)數據:

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

	//更新節點(diǎn)數據
	zkClient.writeData("/p_node", "myData1");
	//使用CAS更新節點(diǎn)數據
	//zkClient.writeData("/p_node", "myData2", 1);

	zkClient.close();
}

獲取子節點(diǎn)列表:

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

	//獲取子節點(diǎn)列表
	List<String> childList = zkClient.getChildren("/p_node");
	childList.stream().forEach(System.out::println);

	zkClient.close();
}

節點(diǎn)監聽(tīng)

Java節點(diǎn)監聽(tīng)都是永久的,觸發(fā)一次后不會(huì )被刪除。

監聽(tīng)節點(diǎn)的子節點(diǎn)變化:

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

		//子節點(diǎn)改變時(shí)調用
		@Override
		public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
			System.out.println(parentPath + "子節點(diǎn)發(fā)生改變");
			System.out.println("當前子節點(diǎn)列表:" + currentChilds);
		}

	});

	//阻塞客戶(hù)端,便于測試
	System.in.read();
}

監聽(tīng)節點(diǎn)數據變化:

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

		//節點(diǎn)數據改變時(shí)調用
		@Override
		public void handleDataChange(String dataPath, Object data) throws Exception {
			System.out.println(dataPath + "節點(diǎn)數據發(fā)生變化");
			System.out.println("修改后的數據為:" + data.toString());
		}

		//節點(diǎn)被刪除時(shí)調用
		@Override
		public void handleDataDeleted(String dataPath) throws Exception {
			System.out.println(dataPath + "節點(diǎn)已被刪除");
		}
	});

	//阻塞客戶(hù)端,便于測試
	System.in.read();
}

監聽(tīng)Zookeeper連接狀態(tài)變化:

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

		//當zookeeper連接狀態(tài)改變時(shí)調用
		@Override
		public void handleStateChanged(Watcher.Event.KeeperState state) throws Exception {
			System.out.println("當前狀態(tài)" + state);
		}

		//在zookeeper會(huì )話(huà)過(guò)期并且創(chuàng  )建了一個(gè)新的會(huì )話(huà)之后調用
		@Override
		public void handleNewSession() throws Exception {
			System.out.println("會(huì )話(huà)過(guò)期,已創(chuàng  )建新的會(huì )話(huà)");
		}

		//當會(huì )話(huà)不能重新建立時(shí)調用
		@Override
		public void handleSessionEstablishmentError(Throwable error) throws Exception {
			error.printStackTrace();
		}
	});

	//阻塞客戶(hù)端,便于測試
	System.in.read();
}

以上就是如何使用Java操作Zookeeper的詳細內容,更多關(guān)于Java操作Zookeeper的資料請關(guān)注腳本之家其它相關(guān)文章!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

三年片在线观看免费大全爱奇艺| 插插无码视频大全不卡网站| 国产精品视频熟女韵味| 国产在线视频一区二区三区98| 337P粉嫩日本欧洲亚洲大胆| 亚洲精品字幕在线观看|