欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用Java操作Zookeeper

 更新時間:2021年04月30日 10:35:56   作者:布禾  
這篇文章主要介紹了如何使用Java操作Zookeeper,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下

簡介

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

Maven依賴:

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

使用zkclient操作Zookeeper

創(chuàng)建節(jié)點:

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

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

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

	//關閉客戶端
	//關閉客戶端的同時,前面創(chuàng)建的臨時節(jié)點也會被刪除
	zkClient.close();
}

讀取節(jié)點數(shù)據(jù):

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

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

刪除節(jié)點:

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

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

	zkClient.close();
}

更新節(jié)點數(shù)據(jù):

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

	//更新節(jié)點數(shù)據(jù)
	zkClient.writeData("/p_node", "myData1");
	//使用CAS更新節(jié)點數(shù)據(jù)
	//zkClient.writeData("/p_node", "myData2", 1);

	zkClient.close();
}

獲取子節(jié)點列表:

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

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

	zkClient.close();
}

節(jié)點監(jiān)聽

Java節(jié)點監(jiān)聽都是永久的,觸發(fā)一次后不會被刪除。

監(jiān)聽節(jié)點的子節(jié)點變化:

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

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

	});

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

監(jiān)聽節(jié)點數(shù)據(jù)變化:

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

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

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

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

監(jiān)聽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)改變時調用
		@Override
		public void handleStateChanged(Watcher.Event.KeeperState state) throws Exception {
			System.out.println("當前狀態(tài)" + state);
		}

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

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

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

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

相關文章

  • 聊聊關于Java方法重寫的反思

    聊聊關于Java方法重寫的反思

    最近在開發(fā)中遇到一個關于Java方法重寫的一些問題,對于方法重寫的用法以及可能導致的問題產(chǎn)生了一些思考,本文用于記錄下這些想法,希望對大家也有所幫助
    2023-05-05
  • Springboot初始化啟動報錯Error?creating?bean?with?name?'dataSource'?defined?in?class?path?resource

    Springboot初始化啟動報錯Error?creating?bean?with?name?'da

    這篇文章主要為大家介紹了Springboot初始化啟動報Error?creating?bean?with?name?'dataSource'?defined?in?class?path?resource解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • java web實現(xiàn)簡單留言板功能

    java web實現(xiàn)簡單留言板功能

    這篇文章主要為大家詳細介紹了java web實現(xiàn)簡單留言板功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 25個最好的免費Eclipse插件

    25個最好的免費Eclipse插件

    這篇文章為大家分享了25個讓Java程序員更高效的Eclipse插件,感興趣的朋友可以參考一下
    2015-12-12
  • 基于SpringBoot+Redis實現(xiàn)一個簡單的限流器

    基于SpringBoot+Redis實現(xiàn)一個簡單的限流器

    在Spring?Boot中使用Redis和過濾器實現(xiàn)請求限流,過濾器將在每個請求到達時檢查請求頻率,并根據(jù)設定的閾值進行限制,這樣可以保護您的應用程序免受惡意請求或高并發(fā)請求的影響,本文我們通過Spring?Boot?+Redis?實現(xiàn)一個輕量級的消息隊列,需要的朋友可以參考下
    2023-08-08
  • 一個簡易的Java多頁面隊列爬蟲程序

    一個簡易的Java多頁面隊列爬蟲程序

    這篇文章主要為大家詳細介紹了一個多頁面的java爬蟲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java常用面板之JScrollPane滾動面板實例詳解

    Java常用面板之JScrollPane滾動面板實例詳解

    這篇文章主要介紹了Java常用面板JScrollPane的簡單介紹和一個相關實例,,需要的朋友可以參考下。
    2017-08-08
  • window系統(tǒng)安裝jdk jre的教程圖解

    window系統(tǒng)安裝jdk jre的教程圖解

    java開發(fā)少不了安裝jdk,jdk可以同時安裝多個版本,只要在項目部署時注意切換版本選擇,下面小編給大家?guī)砹藈indow系統(tǒng)安裝jdk jre的教程圖解,感興趣的朋友一起看看吧
    2018-08-08
  • Java爬取豆瓣電影數(shù)據(jù)的方法詳解

    Java爬取豆瓣電影數(shù)據(jù)的方法詳解

    這篇文章主要介紹了Java爬取豆瓣電影數(shù)據(jù)的方法,結合實例形式詳細分析了Java爬取豆瓣電影數(shù)據(jù)相關原理、操作步驟、實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2020-04-04
  • Java8中常用的日期時間工具類總結

    Java8中常用的日期時間工具類總結

    這篇文章主要為大家詳細介紹了Java8中常用的三個日期時間工具類,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-07-07

最新評論