最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用Java操作Zookeeper

 更新時間:2021年04月30日 10:35:56   作者:布禾  
這篇文章主要介紹了如何使用Java操作Zookeeper,幫助大家更好的理解和學(xué)習(xí)使用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服務(wù)器IP地址和端口號,如果是集群情況下用逗號分割多個Zookeeper服務(wù)器地址
	//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);

	//關(guān)閉客戶端
	//關(guān)閉客戶端的同時,前面創(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é)果:
//節(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é)點改變時調(diào)用
		@Override
		public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
			System.out.println(parentPath + "子節(jié)點發(fā)生改變");
			System.out.println("當(dāng)前子節(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ù)改變時調(diào)用
		@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é)點被刪除時調(diào)用
		@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(){

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

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

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

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

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

相關(guān)文章

  • 使用Maven Helper解決Maven插件沖突的方法

    使用Maven Helper解決Maven插件沖突的方法

    這篇文章主要介紹了使用Maven Helper解決Maven插件沖突的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • java兩個integer數(shù)據(jù)判斷相等用==還是equals

    java兩個integer數(shù)據(jù)判斷相等用==還是equals

    本文主要介紹了java兩個integer數(shù)據(jù)判斷相等用==還是equals,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Java 跨域問題的處理方式

    Java 跨域問題的處理方式

    這篇文章主要介紹了Java 跨域問題的處理方式,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • 基于springboot實現(xiàn)數(shù)據(jù)可視化的示例代碼

    基于springboot實現(xiàn)數(shù)據(jù)可視化的示例代碼

    本文主要介紹了基于springboot實現(xiàn)數(shù)據(jù)可視化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-07-07
  • Java 1.8使用數(shù)組實現(xiàn)循環(huán)隊列

    Java 1.8使用數(shù)組實現(xiàn)循環(huán)隊列

    這篇文章主要為大家詳細(xì)介紹了Java 1.8使用數(shù)組實現(xiàn)循環(huán)隊列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • mybatis 實現(xiàn)多條update同時執(zhí)行

    mybatis 實現(xiàn)多條update同時執(zhí)行

    這篇文章主要介紹了mybatis 實現(xiàn)多條update同時執(zhí)行,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java中keytool的使用

    Java中keytool的使用

    Keytool 是一個JAVA環(huán)境下的安全鑰匙與證書的管理工具,Keytool將密鑰(key)和證書(certificates)存在一個稱為keystore 的文件(受密碼保護(hù))中,本文重點給大家介紹keytool的使用,感興趣的朋友一起看看吧
    2022-02-02
  • 面試官問如何啟動Java?線程

    面試官問如何啟動Java?線程

    這篇文章主要介紹了面試官問如何啟動Java?線程,Java?的線程創(chuàng)建和啟動非常簡單,但如果問一個線程是怎么啟動起來的往往并不清楚,甚至不知道為什么啟動時是調(diào)用start(),而不是調(diào)用run()方法呢?下面我們就一起進(jìn)入文章學(xué)習(xí)這個問題吧
    2021-12-12
  • Java Math類、Random類、System類及BigDecimal類用法示例

    Java Math類、Random類、System類及BigDecimal類用法示例

    這篇文章主要介紹了Java Math類、Random類、System類及BigDecimal類用法,結(jié)合實例形式分析了java數(shù)值運(yùn)算相關(guān)的Math類、Random類、System類及BigDecimal類基本功能與使用技巧,需要的朋友可以參考下
    2019-03-03
  • 在AOP中Spring生成代理類的兩種方式

    在AOP中Spring生成代理類的兩種方式

    今天小編就為大家分享一篇關(guān)于在AOP中Spring生成代理類的兩種方式,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評論

迁安市| 阳曲县| 寻乌县| 溆浦县| 大荔县| 丽水市| 广汉市| 通许县| 南充市| 华亭县| 曲沃县| 肇东市| 张家口市| 孝义市| 天气| 三江| 乌拉特中旗| 潞城市| 锡林浩特市| 灵山县| 株洲市| 沭阳县| 芜湖市| 托里县| 西昌市| 木兰县| 濉溪县| 金秀| 芦溪县| 沙河市| 龙江县| 九江县| 德惠市| 正定县| 青神县| 古丈县| 汽车| 都昌县| 蚌埠市| 林口县| 五寨县|