- 04 ZooKeeperAPI实战
- 1. IDEA环境搭建
- 2.zk连接创建与关闭
- 3. 创建节点
- 4. 删除节点
- 5. 获取数据和验证连接转移
- 6. 注册watcher监听和监听事件被触发
- 7.判断节点是否存在和修改节点
- 8.判断节点是否存在Watcher的使用
- 9.子节点查询
- 10. 全部程序
如果跟我一样还未安装IDEA与环境配置的,需要先进行这些。安装IDEA,在淘宝上花几块钱买个破解版,然后去https://www.oracle.com/java/technologies/downloads/#java8-windows下载JDK,然后参考http://www.51gjie.com/java/45.html配置JDK的环境变量,这样就可以在IDEA中选取JDK环境。完成后测试
package first_test; public class test { public static void main(String[] args){ System.out.println("hello world"); } }
run后结果:
hello world
表明已配置完成!!!
-
新建project
-
将 log4j.properties 文件拷贝到项目的 src 目录,便于我们在控制台输出日志
-
项目的根目录新建 lib 文件夹,将 jar 包拷贝到该目录下。
一共6个jar包
-
将这些jar包做关联影射,File-> Project Structure->Libaries
-
在src文件夹中创建包以及需要用到的类
首先,创建一个包com.bjsxt.api,然后在api里创建需要的类ZooKeeperTest,接下来,我们在类里进行定义
package com.bjsxt.api; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; import org.junit.After; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; public class ZooKeeperTest { //定义一个zk对象 private ZooKeeper zooKeeper; //session的失效时间 private static final int SESSION_TIMEOUT=30000; //定义一个Logger类对象 public static final Logger LOGGER = LoggerFactory.getLogger(ZooKeeperTest.class); //定义一个监听器对象watcher private Watcher watcher = new Watcher() { @Override public void process(WatchedEvent event) { LOGGER.info("process:"+event.getType()); } }; @Test public void connect() throws IOException { zooKeeper = new ZooKeeper("192.168.236.32:2181,192.168.236.33:2181,192.168.236.34:2181",SESSION_TIMEOUT,watcher); LOGGER.info("zk:"+zooKeeper); } @After public void close() throws InterruptedException { if(zooKeeper!=null){ zooKeeper.close(); } } }
运行后结果:
2021-12-20 19:52:28,584 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT 2021-12-20 19:52:28,588 [myid:] - INFO [main:Environment@100] - Client environment:host.name=LAPTOP-G7CRBRST 2021-12-20 19:52:28,588 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_311 2021-12-20 19:52:28,588 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2021-12-20 19:52:28,588 [myid:] - INFO [main:Environment@100] - Client environment:java.home=D:Javajdk1.8.0_311jre 2021-12-20 19:52:28,588 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit5-rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit-rt.jar;D:javajdk1.8.0_311jrelibcharsets.jar;D:javajdk1.8.0_311jrelibdeploy.jar;D:javajdk1.8.0_311jrelibextaccess-bridge-64.jar;D:javajdk1.8.0_311jrelibextcldrdata.jar;D:javajdk1.8.0_311jrelibextdnsns.jar;D:javajdk1.8.0_311jrelibextjaccess.jar;D:javajdk1.8.0_311jrelibextjfxrt.jar;D:javajdk1.8.0_311jrelibextlocaledata.jar;D:javajdk1.8.0_311jrelibextnashorn.jar;D:javajdk1.8.0_311jrelibextsunec.jar;D:javajdk1.8.0_311jrelibextsunjce_provider.jar;D:javajdk1.8.0_311jrelibextsunmscapi.jar;D:javajdk1.8.0_311jrelibextsunpkcs11.jar;D:javajdk1.8.0_311jrelibextzipfs.jar;D:javajdk1.8.0_311jrelibjavaws.jar;D:javajdk1.8.0_311jrelibjce.jar;D:javajdk1.8.0_311jrelibjfr.jar;D:javajdk1.8.0_311jrelibjfxswt.jar;D:javajdk1.8.0_311jrelibjsse.jar;D:javajdk1.8.0_311jrelibmanagement-agent.jar;D:javajdk1.8.0_311jrelibplugin.jar;D:javajdk1.8.0_311jrelibresources.jar;D:javajdk1.8.0_311jrelibrt.jar;D:IdeaProjectsbaizhanzookeeper_demooutproductionzookeeper_demo;D:IdeaProjectsbaizhanzookeeper_demolibnetty-3.7.0.Final.jar;D:IdeaProjectsbaizhanzookeeper_demolibjline-0.9.94.jar;D:IdeaProjectsbaizhanzookeeper_demoliblog4j-1.2.16.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-api-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-log4j12-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibzookeeper-3.4.6.jar;C:Usersadmin.m2repositoryjunitjunit4.13.1junit-4.13.1.jar;C:Usersadmin.m2repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar 2021-12-20 19:52:28,588 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=D:Javajdk1.8.0_311bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libx64;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1bin;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libnvvp;D:softwaresanaconda3;D:softwaresanaconda3scripts;D:softwaresanaconda3Librarybin;D:softwaresCUDA10.0libx64;C:windowssystem32;C:windows;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:softwaresmysql5.6.39bin;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WINDOWSSystem32OpenSSH;D:softwaresanaconda3envsnewtouch;D:softwaresanaconda3envsnewtouchscripts;D:softwaresanaconda3envsnewtouchLibrarybin;C:Program FilesGitcmd;D:softwaresnodejs;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesNVIDIA CorporationNsight Compute 2019.1;D:mysqlmysql56bin;C:windows;C:windowssystem32;C:windowssystem32wbem;D:softwaresCUDA10.0bin;D:softwaresCUDA10.0libnvvp;D:softwaresCUDA10.0libx64;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:Gitcmd;D:softwaresmysql5.6.39bin;d:softwaresanaconda3;d:softwaresanaconda3Librarymingw-w64bin;d:softwaresanaconda3Libraryusrbin;d:softwaresanaconda3Librarybin;d:softwaresanaconda3scripts;C:Usersadminanaconda3;C:Usersadminanaconda3Librarymingw-w64bin;C:Usersadminanaconda3Libraryusrbin;C:Usersadminanaconda3Librarybin;C:Usersadminanaconda3scripts;D:python3.7scripts;D:python3.7;C:UsersadminAppDataLocalMicrosoftWindowsApps;D:办公pycharmPyCharm Community Edition 2020.1.1bin;D:software;C:UsersadminAppDataRoamingnpm;. 2021-12-20 19:52:28,589 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=C:UsersadminAppDataLocalTemp 2021-12-20 19:52:28,589 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=3. 创建节点2021-12-20 19:52:28,589 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Windows 10 2021-12-20 19:52:28,589 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2021-12-20 19:52:28,589 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.0 2021-12-20 19:52:28,589 [myid:] - INFO [main:Environment@100] - Client environment:user.name=admin 2021-12-20 19:52:28,589 [myid:] - INFO [main:Environment@100] - Client environment:user.home=C:Usersadmin 2021-12-20 19:52:28,589 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=D:IdeaProjectsbaizhanzookeeper_demo 2021-12-20 19:52:28,590 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.236.32:2181,192.168.236.33:2181,192.168.236.34:2181 sessionTimeout=30000 watcher=com.bjsxt.api.ZooKeeperTest$1@42f30e0a 2021-12-20 19:52:29,381 [myid:] - INFO [main:ZooKeeperTest@35] - zk:State:ConNECTING sessionid:0x0 local:null remoteserver:null lastZxid:0 xid:1 sent:0 recv:0 queuedpkts:0 pendingresp:0 queuedevents:0 2021-12-20 19:52:29,383 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.236.32/192.168.236.32:2181. Will not attempt to authenticate using SASL (unknown error) 2021-12-20 19:52:29,385 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.236.32/192.168.236.32:2181, initiating session 2021-12-20 19:52:29,400 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.236.32/192.168.236.32:2181, sessionid = 0x17dd4814b730000, negotiated timeout = 30000 2021-12-20 19:52:29,401 [myid:] - INFO [main-EventThread:ZooKeeperTest$1@24] - process:None 2021-12-20 19:52:29,403 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x17dd4814b730000 closed 2021-12-20 19:52:29,403 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down
@Test public void createNode(){ String result = null; try { result = zooKeeper.create("/zkNode01", "hello".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); LOGGER.info("create PERSISTENT node zkNode01 result:"+result); result = zooKeeper.create("/zkNode02","abc".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL); LOGGER.info("create EPHEMERAL node zkNode02 result:"+result); Thread.sleep(30000); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
运行结束后,我们在Xshell中连接zookeeper,可以发现:
[zk: localhost:2181(CONNECTED) 0] ls / [zk02, zk01, zkNode01, zookeeper, zk03]
我们可以看到,创建的普通永久节点zkNode01存在,普通临时节点由于休眠30s,会话断开,临时节点消失。
4. 删除节点@Test public void deleteNode(){ try { zooKeeper.delete("/zk03",-1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); //抛出AssertionError异常 } } }
运行结束后,我们在Xshell中连接zookeeper,可以发现:
[zk: localhost:2181(CONNECTED) 1] ls / [zk02, zk01, zkNode01, zookeeper]
zk03已经删除。但是,如果zk03下面还有子节点的话,是不允许执行删除 *** 作的,即没有子节点的节点才可以被删除!
5. 获取数据和验证连接转移@Test public void getNodeData(){ try { byte[] data = zooKeeper.getData("/zkNode01", null, null); LOGGER.info("getData 1----:"+new String(data)); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } try { Thread.sleep(25000); } catch (InterruptedException e) { e.printStackTrace(); } try { byte[] data = zooKeeper.getData("/zkNode01", null, null); LOGGER.info("getData 2----:"+new String(data)); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } } }
第一次连接成功后,我们可以看到它是从哪个服务器获取数据的,将这台服务器上的zookeeper关闭
[root@node3 bin]# zkServer.sh stop JMX enabled by default Using config: /opt/zookeeper-3.4.6/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED
此时,可以看到连接转移到其他服务器上
2021-12-20 21:13:28,215 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT 2021-12-20 21:13:28,217 [myid:] - INFO [main:Environment@100] - Client environment:host.name=LAPTOP-G7CRBRST 2021-12-20 21:13:28,218 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_311 2021-12-20 21:13:28,218 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2021-12-20 21:13:28,218 [myid:] - INFO [main:Environment@100] - Client environment:java.home=D:Javajdk1.8.0_311jre 2021-12-20 21:13:28,218 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit5-rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit-rt.jar;D:javajdk1.8.0_311jrelibcharsets.jar;D:javajdk1.8.0_311jrelibdeploy.jar;D:javajdk1.8.0_311jrelibextaccess-bridge-64.jar;D:javajdk1.8.0_311jrelibextcldrdata.jar;D:javajdk1.8.0_311jrelibextdnsns.jar;D:javajdk1.8.0_311jrelibextjaccess.jar;D:javajdk1.8.0_311jrelibextjfxrt.jar;D:javajdk1.8.0_311jrelibextlocaledata.jar;D:javajdk1.8.0_311jrelibextnashorn.jar;D:javajdk1.8.0_311jrelibextsunec.jar;D:javajdk1.8.0_311jrelibextsunjce_provider.jar;D:javajdk1.8.0_311jrelibextsunmscapi.jar;D:javajdk1.8.0_311jrelibextsunpkcs11.jar;D:javajdk1.8.0_311jrelibextzipfs.jar;D:javajdk1.8.0_311jrelibjavaws.jar;D:javajdk1.8.0_311jrelibjce.jar;D:javajdk1.8.0_311jrelibjfr.jar;D:javajdk1.8.0_311jrelibjfxswt.jar;D:javajdk1.8.0_311jrelibjsse.jar;D:javajdk1.8.0_311jrelibmanagement-agent.jar;D:javajdk1.8.0_311jrelibplugin.jar;D:javajdk1.8.0_311jrelibresources.jar;D:javajdk1.8.0_311jrelibrt.jar;D:IdeaProjectsbaizhanzookeeper_demooutproductionzookeeper_demo;D:IdeaProjectsbaizhanzookeeper_demolibnetty-3.7.0.Final.jar;D:IdeaProjectsbaizhanzookeeper_demolibjline-0.9.94.jar;D:IdeaProjectsbaizhanzookeeper_demoliblog4j-1.2.16.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-api-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-log4j12-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibzookeeper-3.4.6.jar;C:Usersadmin.m2repositoryjunitjunit4.13.1junit-4.13.1.jar;C:Usersadmin.m2repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar 2021-12-20 21:13:28,218 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=D:Javajdk1.8.0_311bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libx64;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1bin;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libnvvp;D:softwaresanaconda3;D:softwaresanaconda3scripts;D:softwaresanaconda3Librarybin;D:softwaresCUDA10.0libx64;C:windowssystem32;C:windows;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:softwaresmysql5.6.39bin;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WINDOWSSystem32OpenSSH;D:softwaresanaconda3envsnewtouch;D:softwaresanaconda3envsnewtouchscripts;D:softwaresanaconda3envsnewtouchLibrarybin;C:Program FilesGitcmd;D:softwaresnodejs;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesNVIDIA CorporationNsight Compute 2019.1;D:mysqlmysql56bin;C:windows;C:windowssystem32;C:windowssystem32wbem;D:softwaresCUDA10.0bin;D:softwaresCUDA10.0libnvvp;D:softwaresCUDA10.0libx64;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:Gitcmd;D:softwaresmysql5.6.39bin;d:softwaresanaconda3;d:softwaresanaconda3Librarymingw-w64bin;d:softwaresanaconda3Libraryusrbin;d:softwaresanaconda3Librarybin;d:softwaresanaconda3scripts;C:Usersadminanaconda3;C:Usersadminanaconda3Librarymingw-w64bin;C:Usersadminanaconda3Libraryusrbin;C:Usersadminanaconda3Librarybin;C:Usersadminanaconda3scripts;D:python3.7scripts;D:python3.7;C:UsersadminAppDataLocalMicrosoftWindowsApps;D:办公pycharmPyCharm Community Edition 2020.1.1bin;D:software;C:UsersadminAppDataRoamingnpm;. 2021-12-20 21:13:28,218 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=C:UsersadminAppDataLocalTemp 2021-12-20 21:13:28,218 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=6. 注册watcher监听和监听事件被触发2021-12-20 21:13:28,218 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Windows 10 2021-12-20 21:13:28,218 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2021-12-20 21:13:28,218 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.0 2021-12-20 21:13:28,218 [myid:] - INFO [main:Environment@100] - Client environment:user.name=admin 2021-12-20 21:13:28,219 [myid:] - INFO [main:Environment@100] - Client environment:user.home=C:Usersadmin 2021-12-20 21:13:28,219 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=D:IdeaProjectsbaizhanzookeeper_demo 2021-12-20 21:13:28,219 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.236.32:2181,192.168.236.33:2181,192.168.236.34:2181 sessionTimeout=30000 watcher=com.bjsxt.api.ZooKeeperTest$1@24273305 2021-12-20 21:13:29,033 [myid:] - INFO [main:ZooKeeperTest@36] - zk:State:ConNECTING sessionid:0x0 local:null remoteserver:null lastZxid:0 xid:1 sent:0 recv:0 queuedpkts:0 pendingresp:0 queuedevents:0 2021-12-20 21:13:29,035 [myid:] - INFO [main-SendThread(192.168.236.33:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.236.33/192.168.236.33:2181. Will not attempt to authenticate using SASL (unknown error) 2021-12-20 21:13:29,036 [myid:] - INFO [main-SendThread(192.168.236.33:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.236.33/192.168.236.33:2181, initiating session 2021-12-20 21:13:29,041 [myid:] - INFO [main-SendThread(192.168.236.33:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.236.33/192.168.236.33:2181, sessionid = 0x27dd4814b6e0005, negotiated timeout = 30000 2021-12-20 21:13:29,042 [myid:] - INFO [main-EventThread:ZooKeeperTest$1@25] - process:None 2021-12-20 21:13:29,045 [myid:] - INFO [main:ZooKeeperTest@101] - getData 1----:hello 2021-12-20 21:13:43,031 [myid:] - INFO [main-SendThread(192.168.236.33:2181):ClientCnxn$SendThread@1098] - Unable to read additional data from server sessionid 0x27dd4814b6e0005, likely server has closed socket, closing socket connection and attempting reconnect 2021-12-20 21:13:43,147 [myid:] - INFO [main-EventThread:ZooKeeperTest$1@25] - process:None 2021-12-20 21:13:43,462 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.236.32/192.168.236.32:2181. Will not attempt to authenticate using SASL (unknown error) 2021-12-20 21:13:43,463 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.236.32/192.168.236.32:2181, initiating session 2021-12-20 21:13:43,464 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.236.32/192.168.236.32:2181, sessionid = 0x27dd4814b6e0005, negotiated timeout = 30000 2021-12-20 21:13:43,464 [myid:] - INFO [main-EventThread:ZooKeeperTest$1@25] - process:None 2021-12-20 21:13:54,058 [myid:] - INFO [main:ZooKeeperTest@113] - getData 2----:hello 2021-12-20 21:13:54,060 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x27dd4814b6e0005 closed 2021-12-20 21:13:54,060 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down
@Test public void getSetDataWatcher() { String result = null; //注册watcher监听 try { System.out.println("get"); byte[] data = zooKeeper.getData("/zkNode01", new Watcher() { @Override public void process(WatchedEvent event) { LOGGER.info("getSetDataWatcher watcher:{}", event.getType()); System.out.println("watcher work!"); getSetDataWatcher(); //事件触发后重新注册watcher监听 } }, null); result = new String(data); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } LOGGER.info("getData result:{}", result); //触发监听事故 try { System.out.println("set1"); zooKeeper.setData("/zkNode01","setData_aaa".getBytes(),-1); System.out.println("set2"); zooKeeper.setData("/zkNode01","setData_bbb".getBytes(),-1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } System.out.println("show over!"); try { Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); } } }
运行程序后,我们可以看到:
2021-12-20 21:40:41,059 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT 2021-12-20 21:40:41,061 [myid:] - INFO [main:Environment@100] - Client environment:host.name=LAPTOP-G7CRBRST 2021-12-20 21:40:41,061 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_311 2021-12-20 21:40:41,061 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2021-12-20 21:40:41,061 [myid:] - INFO [main:Environment@100] - Client environment:java.home=D:Javajdk1.8.0_311jre 2021-12-20 21:40:41,062 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit5-rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit-rt.jar;D:javajdk1.8.0_311jrelibcharsets.jar;D:javajdk1.8.0_311jrelibdeploy.jar;D:javajdk1.8.0_311jrelibextaccess-bridge-64.jar;D:javajdk1.8.0_311jrelibextcldrdata.jar;D:javajdk1.8.0_311jrelibextdnsns.jar;D:javajdk1.8.0_311jrelibextjaccess.jar;D:javajdk1.8.0_311jrelibextjfxrt.jar;D:javajdk1.8.0_311jrelibextlocaledata.jar;D:javajdk1.8.0_311jrelibextnashorn.jar;D:javajdk1.8.0_311jrelibextsunec.jar;D:javajdk1.8.0_311jrelibextsunjce_provider.jar;D:javajdk1.8.0_311jrelibextsunmscapi.jar;D:javajdk1.8.0_311jrelibextsunpkcs11.jar;D:javajdk1.8.0_311jrelibextzipfs.jar;D:javajdk1.8.0_311jrelibjavaws.jar;D:javajdk1.8.0_311jrelibjce.jar;D:javajdk1.8.0_311jrelibjfr.jar;D:javajdk1.8.0_311jrelibjfxswt.jar;D:javajdk1.8.0_311jrelibjsse.jar;D:javajdk1.8.0_311jrelibmanagement-agent.jar;D:javajdk1.8.0_311jrelibplugin.jar;D:javajdk1.8.0_311jrelibresources.jar;D:javajdk1.8.0_311jrelibrt.jar;D:IdeaProjectsbaizhanzookeeper_demooutproductionzookeeper_demo;D:IdeaProjectsbaizhanzookeeper_demolibnetty-3.7.0.Final.jar;D:IdeaProjectsbaizhanzookeeper_demolibjline-0.9.94.jar;D:IdeaProjectsbaizhanzookeeper_demoliblog4j-1.2.16.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-api-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-log4j12-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibzookeeper-3.4.6.jar;C:Usersadmin.m2repositoryjunitjunit4.13.1junit-4.13.1.jar;C:Usersadmin.m2repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar 2021-12-20 21:40:41,062 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=D:Javajdk1.8.0_311bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libx64;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1bin;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libnvvp;D:softwaresanaconda3;D:softwaresanaconda3scripts;D:softwaresanaconda3Librarybin;D:softwaresCUDA10.0libx64;C:windowssystem32;C:windows;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:softwaresmysql5.6.39bin;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WINDOWSSystem32OpenSSH;D:softwaresanaconda3envsnewtouch;D:softwaresanaconda3envsnewtouchscripts;D:softwaresanaconda3envsnewtouchLibrarybin;C:Program FilesGitcmd;D:softwaresnodejs;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesNVIDIA CorporationNsight Compute 2019.1;D:mysqlmysql56bin;C:windows;C:windowssystem32;C:windowssystem32wbem;D:softwaresCUDA10.0bin;D:softwaresCUDA10.0libnvvp;D:softwaresCUDA10.0libx64;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:Gitcmd;D:softwaresmysql5.6.39bin;d:softwaresanaconda3;d:softwaresanaconda3Librarymingw-w64bin;d:softwaresanaconda3Libraryusrbin;d:softwaresanaconda3Librarybin;d:softwaresanaconda3scripts;C:Usersadminanaconda3;C:Usersadminanaconda3Librarymingw-w64bin;C:Usersadminanaconda3Libraryusrbin;C:Usersadminanaconda3Librarybin;C:Usersadminanaconda3scripts;D:python3.7scripts;D:python3.7;C:UsersadminAppDataLocalMicrosoftWindowsApps;D:办公pycharmPyCharm Community Edition 2020.1.1bin;D:software;C:UsersadminAppDataRoamingnpm;. 2021-12-20 21:40:41,062 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=C:UsersadminAppDataLocalTemp 2021-12-20 21:40:41,062 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=2021-12-20 21:40:41,062 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Windows 10 2021-12-20 21:40:41,062 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2021-12-20 21:40:41,062 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.0 2021-12-20 21:40:41,062 [myid:] - INFO [main:Environment@100] - Client environment:user.name=admin 2021-12-20 21:40:41,062 [myid:] - INFO [main:Environment@100] - Client environment:user.home=C:Usersadmin 2021-12-20 21:40:41,062 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=D:IdeaProjectsbaizhanzookeeper_demo 2021-12-20 21:40:41,063 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.236.32:2181,192.168.236.33:2181,192.168.236.34:2181 sessionTimeout=30000 watcher=com.bjsxt.api.ZooKeeperTest$1@24273305 2021-12-20 21:40:41,884 [myid:] - INFO [main:ZooKeeperTest@38] - zk:State:ConNECTING sessionid:0x0 local:null remoteserver:null lastZxid:0 xid:1 sent:0 recv:0 queuedpkts:0 pendingresp:0 queuedevents:0 get 2021-12-20 21:40:41,886 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.236.32/192.168.236.32:2181. Will not attempt to authenticate using SASL (unknown error) 2021-12-20 21:40:41,887 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.236.32/192.168.236.32:2181, initiating session 2021-12-20 21:40:41,892 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.236.32/192.168.236.32:2181, sessionid = 0x17dd4814b730003, negotiated timeout = 30000 2021-12-20 21:40:41,893 [myid:] - INFO [main-EventThread:ZooKeeperTest$1@25] - process:None 2021-12-20 21:40:41,896 [myid:] - INFO [main:ZooKeeperTest@150] - getData result:hello set1 set2 2021-12-20 21:40:41,900 [myid:] - INFO [main-EventThread:ZooKeeperTest$2@141] - getSetDataWatcher watcher:NodeDataChanged watcher work! show over! 2021-12-20 21:41:01,921 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x17dd4814b730003 closed 2021-12-20 21:41:01,921 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down
我可以得出的两个结论:
- Watcher监听是一次性的(只能被触发一次)
- 监听程序与方法主程序是线程异步的
@Test public void isExists(){ Stat stat = null; try { stat = zooKeeper.exists("/zkNode01", false);//如果watch为True,则绑定定义的监听器对象watcher } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } Assert.assertNotNull(stat); //判断对象是否为空,如果对象为空,会抛出异常 LOGGER.info("node exists,stat version:{}",+stat.getVersion()); } @Test public void setNodeData(){ Stat stat = null; try { //如果节点不存在则会抛出异常 stat = zooKeeper.setData("/zkNode01", "helloworld".getBytes(), -1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } Assert.assertNotNull(stat); //判断对象是否为空,如果对象为空,会抛出异常 LOGGER.info("setNodeData stat:{}",stat); } }
运行结束后,结果为:
2021-12-21 11:03:31,797 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT 2021-12-21 11:03:31,799 [myid:] - INFO [main:Environment@100] - Client environment:host.name=LAPTOP-G7CRBRST 2021-12-21 11:03:31,800 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_311 2021-12-21 11:03:31,800 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2021-12-21 11:03:31,800 [myid:] - INFO [main:Environment@100] - Client environment:java.home=D:Javajdk1.8.0_311jre 2021-12-21 11:03:31,800 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit5-rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit-rt.jar;D:javajdk1.8.0_311jrelibcharsets.jar;D:javajdk1.8.0_311jrelibdeploy.jar;D:javajdk1.8.0_311jrelibextaccess-bridge-64.jar;D:javajdk1.8.0_311jrelibextcldrdata.jar;D:javajdk1.8.0_311jrelibextdnsns.jar;D:javajdk1.8.0_311jrelibextjaccess.jar;D:javajdk1.8.0_311jrelibextjfxrt.jar;D:javajdk1.8.0_311jrelibextlocaledata.jar;D:javajdk1.8.0_311jrelibextnashorn.jar;D:javajdk1.8.0_311jrelibextsunec.jar;D:javajdk1.8.0_311jrelibextsunjce_provider.jar;D:javajdk1.8.0_311jrelibextsunmscapi.jar;D:javajdk1.8.0_311jrelibextsunpkcs11.jar;D:javajdk1.8.0_311jrelibextzipfs.jar;D:javajdk1.8.0_311jrelibjavaws.jar;D:javajdk1.8.0_311jrelibjce.jar;D:javajdk1.8.0_311jrelibjfr.jar;D:javajdk1.8.0_311jrelibjfxswt.jar;D:javajdk1.8.0_311jrelibjsse.jar;D:javajdk1.8.0_311jrelibmanagement-agent.jar;D:javajdk1.8.0_311jrelibplugin.jar;D:javajdk1.8.0_311jrelibresources.jar;D:javajdk1.8.0_311jrelibrt.jar;D:IdeaProjectsbaizhanzookeeper_demooutproductionzookeeper_demo;D:IdeaProjectsbaizhanzookeeper_demolibnetty-3.7.0.Final.jar;D:IdeaProjectsbaizhanzookeeper_demolibjline-0.9.94.jar;D:IdeaProjectsbaizhanzookeeper_demoliblog4j-1.2.16.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-api-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-log4j12-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibzookeeper-3.4.6.jar;C:Usersadmin.m2repositoryjunitjunit4.13.1junit-4.13.1.jar;C:Usersadmin.m2repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar 2021-12-21 11:03:31,800 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=D:Javajdk1.8.0_311bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libx64;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1bin;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libnvvp;D:softwaresanaconda3;D:softwaresanaconda3scripts;D:softwaresanaconda3Librarybin;D:softwaresCUDA10.0libx64;C:windowssystem32;C:windows;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:softwaresmysql5.6.39bin;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WINDOWSSystem32OpenSSH;D:softwaresanaconda3envsnewtouch;D:softwaresanaconda3envsnewtouchscripts;D:softwaresanaconda3envsnewtouchLibrarybin;C:Program FilesGitcmd;D:softwaresnodejs;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesNVIDIA CorporationNsight Compute 2019.1;D:mysqlmysql56bin;C:windows;C:windowssystem32;C:windowssystem32wbem;D:softwaresCUDA10.0bin;D:softwaresCUDA10.0libnvvp;D:softwaresCUDA10.0libx64;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:Gitcmd;D:softwaresmysql5.6.39bin;d:softwaresanaconda3;d:softwaresanaconda3Librarymingw-w64bin;d:softwaresanaconda3Libraryusrbin;d:softwaresanaconda3Librarybin;d:softwaresanaconda3scripts;C:Usersadminanaconda3;C:Usersadminanaconda3Librarymingw-w64bin;C:Usersadminanaconda3Libraryusrbin;C:Usersadminanaconda3Librarybin;C:Usersadminanaconda3scripts;D:python3.7scripts;D:python3.7;C:UsersadminAppDataLocalMicrosoftWindowsApps;D:办公pycharmPyCharm Community Edition 2020.1.1bin;D:software;C:UsersadminAppDataRoamingnpm;. 2021-12-21 11:03:31,800 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=C:UsersadminAppDataLocalTemp 2021-12-21 11:03:31,800 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=2021-12-21 11:03:31,800 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Windows 10 2021-12-21 11:03:31,800 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2021-12-21 11:03:31,800 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.0 2021-12-21 11:03:31,801 [myid:] - INFO [main:Environment@100] - Client environment:user.name=admin 2021-12-21 11:03:31,801 [myid:] - INFO [main:Environment@100] - Client environment:user.home=C:Usersadmin 2021-12-21 11:03:31,801 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=D:IdeaProjectsbaizhanzookeeper_demo 2021-12-21 11:03:31,802 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.236.32:2181,192.168.236.33:2181,192.168.236.34:2181 sessionTimeout=30000 watcher=com.bjsxt.api.ZooKeeperTest$1@24273305 2021-12-21 11:03:32,655 [myid:] - INFO [main:ZooKeeperTest@39] - zk:State:ConNECTING sessionid:0x0 local:null remoteserver:null lastZxid:0 xid:1 sent:0 recv:0 queuedpkts:0 pendingresp:0 queuedevents:0 2021-12-21 11:03:32,657 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.236.32/192.168.236.32:2181. Will not attempt to authenticate using SASL (unknown error) 2021-12-21 11:03:32,659 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.236.32/192.168.236.32:2181, initiating session 2021-12-21 11:03:32,665 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.236.32/192.168.236.32:2181, sessionid = 0x17dd56ba6d30002, negotiated timeout = 30000 2021-12-21 11:03:32,666 [myid:] - INFO [main-EventThread:ZooKeeperTest$1@26] - process:None 2021-12-21 11:03:32,668 [myid:] - INFO [main:ZooKeeperTest@194] - node exists,stat version:11 2021-12-21 11:03:32,670 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x17dd56ba6d30002 closed 2021-12-21 11:03:32,670 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down
可以看出:节点存在。
2021-12-21 10:57:58,484 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT 2021-12-21 10:57:58,487 [myid:] - INFO [main:Environment@100] - Client environment:host.name=LAPTOP-G7CRBRST 2021-12-21 10:57:58,487 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_311 2021-12-21 10:57:58,487 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2021-12-21 10:57:58,487 [myid:] - INFO [main:Environment@100] - Client environment:java.home=D:Javajdk1.8.0_311jre 2021-12-21 10:57:58,487 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit5-rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit-rt.jar;D:javajdk1.8.0_311jrelibcharsets.jar;D:javajdk1.8.0_311jrelibdeploy.jar;D:javajdk1.8.0_311jrelibextaccess-bridge-64.jar;D:javajdk1.8.0_311jrelibextcldrdata.jar;D:javajdk1.8.0_311jrelibextdnsns.jar;D:javajdk1.8.0_311jrelibextjaccess.jar;D:javajdk1.8.0_311jrelibextjfxrt.jar;D:javajdk1.8.0_311jrelibextlocaledata.jar;D:javajdk1.8.0_311jrelibextnashorn.jar;D:javajdk1.8.0_311jrelibextsunec.jar;D:javajdk1.8.0_311jrelibextsunjce_provider.jar;D:javajdk1.8.0_311jrelibextsunmscapi.jar;D:javajdk1.8.0_311jrelibextsunpkcs11.jar;D:javajdk1.8.0_311jrelibextzipfs.jar;D:javajdk1.8.0_311jrelibjavaws.jar;D:javajdk1.8.0_311jrelibjce.jar;D:javajdk1.8.0_311jrelibjfr.jar;D:javajdk1.8.0_311jrelibjfxswt.jar;D:javajdk1.8.0_311jrelibjsse.jar;D:javajdk1.8.0_311jrelibmanagement-agent.jar;D:javajdk1.8.0_311jrelibplugin.jar;D:javajdk1.8.0_311jrelibresources.jar;D:javajdk1.8.0_311jrelibrt.jar;D:IdeaProjectsbaizhanzookeeper_demooutproductionzookeeper_demo;D:IdeaProjectsbaizhanzookeeper_demolibnetty-3.7.0.Final.jar;D:IdeaProjectsbaizhanzookeeper_demolibjline-0.9.94.jar;D:IdeaProjectsbaizhanzookeeper_demoliblog4j-1.2.16.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-api-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-log4j12-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibzookeeper-3.4.6.jar;C:Usersadmin.m2repositoryjunitjunit4.13.1junit-4.13.1.jar;C:Usersadmin.m2repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar 2021-12-21 10:57:58,487 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=D:Javajdk1.8.0_311bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libx64;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1bin;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libnvvp;D:softwaresanaconda3;D:softwaresanaconda3scripts;D:softwaresanaconda3Librarybin;D:softwaresCUDA10.0libx64;C:windowssystem32;C:windows;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:softwaresmysql5.6.39bin;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WINDOWSSystem32OpenSSH;D:softwaresanaconda3envsnewtouch;D:softwaresanaconda3envsnewtouchscripts;D:softwaresanaconda3envsnewtouchLibrarybin;C:Program FilesGitcmd;D:softwaresnodejs;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesNVIDIA CorporationNsight Compute 2019.1;D:mysqlmysql56bin;C:windows;C:windowssystem32;C:windowssystem32wbem;D:softwaresCUDA10.0bin;D:softwaresCUDA10.0libnvvp;D:softwaresCUDA10.0libx64;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:Gitcmd;D:softwaresmysql5.6.39bin;d:softwaresanaconda3;d:softwaresanaconda3Librarymingw-w64bin;d:softwaresanaconda3Libraryusrbin;d:softwaresanaconda3Librarybin;d:softwaresanaconda3scripts;C:Usersadminanaconda3;C:Usersadminanaconda3Librarymingw-w64bin;C:Usersadminanaconda3Libraryusrbin;C:Usersadminanaconda3Librarybin;C:Usersadminanaconda3scripts;D:python3.7scripts;D:python3.7;C:UsersadminAppDataLocalMicrosoftWindowsApps;D:办公pycharmPyCharm Community Edition 2020.1.1bin;D:software;C:UsersadminAppDataRoamingnpm;. 2021-12-21 10:57:58,488 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=C:UsersadminAppDataLocalTemp 2021-12-21 10:57:58,488 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=2021-12-21 10:57:58,488 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Windows 10 2021-12-21 10:57:58,488 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2021-12-21 10:57:58,488 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.0 2021-12-21 10:57:58,488 [myid:] - INFO [main:Environment@100] - Client environment:user.name=admin 2021-12-21 10:57:58,488 [myid:] - INFO [main:Environment@100] - Client environment:user.home=C:Usersadmin 2021-12-21 10:57:58,488 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=D:IdeaProjectsbaizhanzookeeper_demo 2021-12-21 10:57:58,489 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.236.32:2181,192.168.236.33:2181,192.168.236.34:2181 sessionTimeout=30000 watcher=com.bjsxt.api.ZooKeeperTest$1@24273305 2021-12-21 10:57:59,304 [myid:] - INFO [main:ZooKeeperTest@39] - zk:State:ConNECTING sessionid:0x0 local:null remoteserver:null lastZxid:0 xid:1 sent:0 recv:0 queuedpkts:0 pendingresp:0 queuedevents:0 2021-12-21 10:57:59,307 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.236.32/192.168.236.32:2181. Will not attempt to authenticate using SASL (unknown error) 2021-12-21 10:57:59,308 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.236.32/192.168.236.32:2181, initiating session 2021-12-21 10:57:59,315 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.236.32/192.168.236.32:2181, sessionid = 0x17dd56ba6d30001, negotiated timeout = 30000 2021-12-21 10:57:59,316 [myid:] - INFO [main-EventThread:ZooKeeperTest$1@26] - process:None 2021-12-21 10:57:59,321 [myid:] - INFO [main:ZooKeeperTest@206] - setNodeData stat:21474836484,25769803785,1639953946008,1639964006397,11,0,0,0,10,0,21474836484 2021-12-21 10:57:59,323 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x17dd56ba6d30001 closed 2021-12-21 10:57:59,323 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down
可以看出:节点已经被成功修改!
8.判断节点是否存在Watcher的使用@Test public void nodeExistsWatcher(){ Stat stat = null; try { //watch=true表明使用定义好的监听对象 stat = zooKeeper.exists("/zkNode01",true); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } Assert.assertNotNull(stat); //判断对象是否为空,如果对象为空,会抛出异常 try { zooKeeper.delete("/zkNode01",-1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } } @Test public void nodeExistsUserDefWatcher(){ Stat stat = null; try { stat = zooKeeper.exists("/zkNode01", new Watcher() { @Override public void process(WatchedEvent event) { LOGGER.info("nodeExistsUserDefWatcher watcher evevt_type:{}",event.getType()); } }); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } Assert.assertNotNull(stat); try { zooKeeper.setData("/zkNode01","update_hello".getBytes(),-1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } try { zooKeeper.delete("/zkNode01",-1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } }
运行nodeExistsWatcher结果为:
2021-12-21 11:23:45,798 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT 2021-12-21 11:23:45,801 [myid:] - INFO [main:Environment@100] - Client environment:host.name=LAPTOP-G7CRBRST 2021-12-21 11:23:45,801 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_311 2021-12-21 11:23:45,801 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2021-12-21 11:23:45,801 [myid:] - INFO [main:Environment@100] - Client environment:java.home=D:Javajdk1.8.0_311jre 2021-12-21 11:23:45,801 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit5-rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit-rt.jar;D:javajdk1.8.0_311jrelibcharsets.jar;D:javajdk1.8.0_311jrelibdeploy.jar;D:javajdk1.8.0_311jrelibextaccess-bridge-64.jar;D:javajdk1.8.0_311jrelibextcldrdata.jar;D:javajdk1.8.0_311jrelibextdnsns.jar;D:javajdk1.8.0_311jrelibextjaccess.jar;D:javajdk1.8.0_311jrelibextjfxrt.jar;D:javajdk1.8.0_311jrelibextlocaledata.jar;D:javajdk1.8.0_311jrelibextnashorn.jar;D:javajdk1.8.0_311jrelibextsunec.jar;D:javajdk1.8.0_311jrelibextsunjce_provider.jar;D:javajdk1.8.0_311jrelibextsunmscapi.jar;D:javajdk1.8.0_311jrelibextsunpkcs11.jar;D:javajdk1.8.0_311jrelibextzipfs.jar;D:javajdk1.8.0_311jrelibjavaws.jar;D:javajdk1.8.0_311jrelibjce.jar;D:javajdk1.8.0_311jrelibjfr.jar;D:javajdk1.8.0_311jrelibjfxswt.jar;D:javajdk1.8.0_311jrelibjsse.jar;D:javajdk1.8.0_311jrelibmanagement-agent.jar;D:javajdk1.8.0_311jrelibplugin.jar;D:javajdk1.8.0_311jrelibresources.jar;D:javajdk1.8.0_311jrelibrt.jar;D:IdeaProjectsbaizhanzookeeper_demooutproductionzookeeper_demo;D:IdeaProjectsbaizhanzookeeper_demolibnetty-3.7.0.Final.jar;D:IdeaProjectsbaizhanzookeeper_demolibjline-0.9.94.jar;D:IdeaProjectsbaizhanzookeeper_demoliblog4j-1.2.16.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-api-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-log4j12-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibzookeeper-3.4.6.jar;C:Usersadmin.m2repositoryjunitjunit4.13.1junit-4.13.1.jar;C:Usersadmin.m2repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar 2021-12-21 11:23:45,801 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=D:Javajdk1.8.0_311bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libx64;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1bin;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libnvvp;D:softwaresanaconda3;D:softwaresanaconda3scripts;D:softwaresanaconda3Librarybin;D:softwaresCUDA10.0libx64;C:windowssystem32;C:windows;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:softwaresmysql5.6.39bin;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WINDOWSSystem32OpenSSH;D:softwaresanaconda3envsnewtouch;D:softwaresanaconda3envsnewtouchscripts;D:softwaresanaconda3envsnewtouchLibrarybin;C:Program FilesGitcmd;D:softwaresnodejs;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesNVIDIA CorporationNsight Compute 2019.1;D:mysqlmysql56bin;C:windows;C:windowssystem32;C:windowssystem32wbem;D:softwaresCUDA10.0bin;D:softwaresCUDA10.0libnvvp;D:softwaresCUDA10.0libx64;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:Gitcmd;D:softwaresmysql5.6.39bin;d:softwaresanaconda3;d:softwaresanaconda3Librarymingw-w64bin;d:softwaresanaconda3Libraryusrbin;d:softwaresanaconda3Librarybin;d:softwaresanaconda3scripts;C:Usersadminanaconda3;C:Usersadminanaconda3Librarymingw-w64bin;C:Usersadminanaconda3Libraryusrbin;C:Usersadminanaconda3Librarybin;C:Usersadminanaconda3scripts;D:python3.7scripts;D:python3.7;C:UsersadminAppDataLocalMicrosoftWindowsApps;D:办公pycharmPyCharm Community Edition 2020.1.1bin;D:software;C:UsersadminAppDataRoamingnpm;. 2021-12-21 11:23:45,802 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=C:UsersadminAppDataLocalTemp 2021-12-21 11:23:45,802 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=2021-12-21 11:23:45,802 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Windows 10 2021-12-21 11:23:45,802 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2021-12-21 11:23:45,802 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.0 2021-12-21 11:23:45,802 [myid:] - INFO [main:Environment@100] - Client environment:user.name=admin 2021-12-21 11:23:45,802 [myid:] - INFO [main:Environment@100] - Client environment:user.home=C:Usersadmin 2021-12-21 11:23:45,802 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=D:IdeaProjectsbaizhanzookeeper_demo 2021-12-21 11:23:45,803 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.236.32:2181,192.168.236.33:2181,192.168.236.34:2181 sessionTimeout=30000 watcher=com.bjsxt.api.ZooKeeperTest$1@24273305 2021-12-21 11:23:46,635 [myid:] - INFO [main:ZooKeeperTest@39] - zk:State:ConNECTING sessionid:0x0 local:null remoteserver:null lastZxid:0 xid:1 sent:0 recv:0 queuedpkts:0 pendingresp:0 queuedevents:0 2021-12-21 11:23:46,637 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.236.32/192.168.236.32:2181. Will not attempt to authenticate using SASL (unknown error) 2021-12-21 11:23:46,638 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.236.32/192.168.236.32:2181, initiating session 2021-12-21 11:23:46,645 [myid:] - INFO [main-SendThread(192.168.236.32:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.236.32/192.168.236.32:2181, sessionid = 0x17dd56ba6d30003, negotiated timeout = 30000 2021-12-21 11:23:46,646 [myid:] - INFO [main-EventThread:ZooKeeperTest$1@26] - process:None 2021-12-21 11:23:46,651 [myid:] - INFO [main-EventThread:ZooKeeperTest$1@26] - process:NodeDeleted 2021-12-21 11:23:46,654 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x17dd56ba6d30003 closed 2021-12-21 11:23:46,654 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down
发现:删除节点 *** 作被监听。
然后,重新创建/zkNode01,再运行nodeExistsUserDefWatcher,结果为:
2021-12-21 11:30:00,716 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT 2021-12-21 11:30:00,719 [myid:] - INFO [main:Environment@100] - Client environment:host.name=LAPTOP-G7CRBRST 2021-12-21 11:30:00,719 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_311 2021-12-21 11:30:00,719 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2021-12-21 11:30:00,719 [myid:] - INFO [main:Environment@100] - Client environment:java.home=D:Javajdk1.8.0_311jre 2021-12-21 11:30:00,719 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit5-rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit-rt.jar;D:javajdk1.8.0_311jrelibcharsets.jar;D:javajdk1.8.0_311jrelibdeploy.jar;D:javajdk1.8.0_311jrelibextaccess-bridge-64.jar;D:javajdk1.8.0_311jrelibextcldrdata.jar;D:javajdk1.8.0_311jrelibextdnsns.jar;D:javajdk1.8.0_311jrelibextjaccess.jar;D:javajdk1.8.0_311jrelibextjfxrt.jar;D:javajdk1.8.0_311jrelibextlocaledata.jar;D:javajdk1.8.0_311jrelibextnashorn.jar;D:javajdk1.8.0_311jrelibextsunec.jar;D:javajdk1.8.0_311jrelibextsunjce_provider.jar;D:javajdk1.8.0_311jrelibextsunmscapi.jar;D:javajdk1.8.0_311jrelibextsunpkcs11.jar;D:javajdk1.8.0_311jrelibextzipfs.jar;D:javajdk1.8.0_311jrelibjavaws.jar;D:javajdk1.8.0_311jrelibjce.jar;D:javajdk1.8.0_311jrelibjfr.jar;D:javajdk1.8.0_311jrelibjfxswt.jar;D:javajdk1.8.0_311jrelibjsse.jar;D:javajdk1.8.0_311jrelibmanagement-agent.jar;D:javajdk1.8.0_311jrelibplugin.jar;D:javajdk1.8.0_311jrelibresources.jar;D:javajdk1.8.0_311jrelibrt.jar;D:IdeaProjectsbaizhanzookeeper_demooutproductionzookeeper_demo;D:IdeaProjectsbaizhanzookeeper_demolibnetty-3.7.0.Final.jar;D:IdeaProjectsbaizhanzookeeper_demolibjline-0.9.94.jar;D:IdeaProjectsbaizhanzookeeper_demoliblog4j-1.2.16.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-api-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-log4j12-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibzookeeper-3.4.6.jar;C:Usersadmin.m2repositoryjunitjunit4.13.1junit-4.13.1.jar;C:Usersadmin.m2repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar 2021-12-21 11:30:00,719 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=D:Javajdk1.8.0_311bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libx64;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1bin;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libnvvp;D:softwaresanaconda3;D:softwaresanaconda3scripts;D:softwaresanaconda3Librarybin;D:softwaresCUDA10.0libx64;C:windowssystem32;C:windows;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:softwaresmysql5.6.39bin;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WINDOWSSystem32OpenSSH;D:softwaresanaconda3envsnewtouch;D:softwaresanaconda3envsnewtouchscripts;D:softwaresanaconda3envsnewtouchLibrarybin;C:Program FilesGitcmd;D:softwaresnodejs;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesNVIDIA CorporationNsight Compute 2019.1;D:mysqlmysql56bin;C:windows;C:windowssystem32;C:windowssystem32wbem;D:softwaresCUDA10.0bin;D:softwaresCUDA10.0libnvvp;D:softwaresCUDA10.0libx64;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:Gitcmd;D:softwaresmysql5.6.39bin;d:softwaresanaconda3;d:softwaresanaconda3Librarymingw-w64bin;d:softwaresanaconda3Libraryusrbin;d:softwaresanaconda3Librarybin;d:softwaresanaconda3scripts;C:Usersadminanaconda3;C:Usersadminanaconda3Librarymingw-w64bin;C:Usersadminanaconda3Libraryusrbin;C:Usersadminanaconda3Librarybin;C:Usersadminanaconda3scripts;D:python3.7scripts;D:python3.7;C:UsersadminAppDataLocalMicrosoftWindowsApps;D:办公pycharmPyCharm Community Edition 2020.1.1bin;D:software;C:UsersadminAppDataRoamingnpm;. 2021-12-21 11:30:00,720 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=C:UsersadminAppDataLocalTemp 2021-12-21 11:30:00,720 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=2021-12-21 11:30:00,720 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Windows 10 2021-12-21 11:30:00,720 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2021-12-21 11:30:00,720 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.0 2021-12-21 11:30:00,720 [myid:] - INFO [main:Environment@100] - Client environment:user.name=admin 2021-12-21 11:30:00,720 [myid:] - INFO [main:Environment@100] - Client environment:user.home=C:Usersadmin 2021-12-21 11:30:00,721 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=D:IdeaProjectsbaizhanzookeeper_demo 2021-12-21 11:30:00,722 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.236.32:2181,192.168.236.33:2181,192.168.236.34:2181 sessionTimeout=30000 watcher=com.bjsxt.api.ZooKeeperTest$1@24273305 2021-12-21 11:30:01,577 [myid:] - INFO [main:ZooKeeperTest@39] - zk:State:ConNECTING sessionid:0x0 local:null remoteserver:null lastZxid:0 xid:1 sent:0 recv:0 queuedpkts:0 pendingresp:0 queuedevents:0 2021-12-21 11:30:01,580 [myid:] - INFO [main-SendThread(192.168.236.33:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.236.33/192.168.236.33:2181. Will not attempt to authenticate using SASL (unknown error) 2021-12-21 11:30:01,581 [myid:] - INFO [main-SendThread(192.168.236.33:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.236.33/192.168.236.33:2181, initiating session 2021-12-21 11:30:01,586 [myid:] - INFO [main-SendThread(192.168.236.33:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.236.33/192.168.236.33:2181, sessionid = 0x27dd573cc600001, negotiated timeout = 30000 2021-12-21 11:30:01,587 [myid:] - INFO [main-EventThread:ZooKeeperTest$1@26] - process:None 2021-12-21 11:30:01,596 [myid:] - INFO [main-EventThread:ZooKeeperTest$3@242] - nodeExistsUserDefWatcher watcher evevt_type:NodeDataChanged 2021-12-21 11:30:01,601 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x27dd573cc600001 closed 2021-12-21 11:30:01,601 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down
发现:修改触发了watcher机制,删除并没有触发。watcher机制只能被触发一次,由于setData先触发了,delete就没有触发。
9.子节点查询@Test public void getChildNodes(){ ListchildContentList = new ArrayList<>(); try { List childrens = zooKeeper.getChildren("/zk02", true); for(String children:childrens){ System.out.println(children); //打印节点名称 byte[] data = zooKeeper.getData("/zk02/" + children, null, null); //path:子节点路径 childContentList.add(new String(data)); //将字节数组转化为String并添加到childContentList列表中 } for (String childContent:childContentList){ System.out.println(childContent); } } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } }
运行结果为:
2021-12-21 11:49:27,204 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT 2021-12-21 11:49:27,207 [myid:] - INFO [main:Environment@100] - Client environment:host.name=LAPTOP-G7CRBRST 2021-12-21 11:49:27,208 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_311 2021-12-21 11:49:27,208 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2021-12-21 11:49:27,208 [myid:] - INFO [main:Environment@100] - Client environment:java.home=D:Javajdk1.8.0_311jre 2021-12-21 11:49:27,208 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit5-rt.jar;D:softwaresIntelliJ IDEA 2021.3pluginsjunitlibjunit-rt.jar;D:javajdk1.8.0_311jrelibcharsets.jar;D:javajdk1.8.0_311jrelibdeploy.jar;D:javajdk1.8.0_311jrelibextaccess-bridge-64.jar;D:javajdk1.8.0_311jrelibextcldrdata.jar;D:javajdk1.8.0_311jrelibextdnsns.jar;D:javajdk1.8.0_311jrelibextjaccess.jar;D:javajdk1.8.0_311jrelibextjfxrt.jar;D:javajdk1.8.0_311jrelibextlocaledata.jar;D:javajdk1.8.0_311jrelibextnashorn.jar;D:javajdk1.8.0_311jrelibextsunec.jar;D:javajdk1.8.0_311jrelibextsunjce_provider.jar;D:javajdk1.8.0_311jrelibextsunmscapi.jar;D:javajdk1.8.0_311jrelibextsunpkcs11.jar;D:javajdk1.8.0_311jrelibextzipfs.jar;D:javajdk1.8.0_311jrelibjavaws.jar;D:javajdk1.8.0_311jrelibjce.jar;D:javajdk1.8.0_311jrelibjfr.jar;D:javajdk1.8.0_311jrelibjfxswt.jar;D:javajdk1.8.0_311jrelibjsse.jar;D:javajdk1.8.0_311jrelibmanagement-agent.jar;D:javajdk1.8.0_311jrelibplugin.jar;D:javajdk1.8.0_311jrelibresources.jar;D:javajdk1.8.0_311jrelibrt.jar;D:IdeaProjectsbaizhanzookeeper_demooutproductionzookeeper_demo;D:IdeaProjectsbaizhanzookeeper_demolibnetty-3.7.0.Final.jar;D:IdeaProjectsbaizhanzookeeper_demolibjline-0.9.94.jar;D:IdeaProjectsbaizhanzookeeper_demoliblog4j-1.2.16.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-api-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibslf4j-log4j12-1.6.1.jar;D:IdeaProjectsbaizhanzookeeper_demolibzookeeper-3.4.6.jar;C:Usersadmin.m2repositoryjunitjunit4.13.1junit-4.13.1.jar;C:Usersadmin.m2repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;D:softwaresIntelliJ IDEA 2021.3libidea_rt.jar 2021-12-21 11:49:27,208 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=D:Javajdk1.8.0_311bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libx64;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1bin;C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1libnvvp;D:softwaresanaconda3;D:softwaresanaconda3scripts;D:softwaresanaconda3Librarybin;D:softwaresCUDA10.0libx64;C:windowssystem32;C:windows;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:softwaresmysql5.6.39bin;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WINDOWSSystem32OpenSSH;D:softwaresanaconda3envsnewtouch;D:softwaresanaconda3envsnewtouchscripts;D:softwaresanaconda3envsnewtouchLibrarybin;C:Program FilesGitcmd;D:softwaresnodejs;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesNVIDIA CorporationNsight Compute 2019.1;D:mysqlmysql56bin;C:windows;C:windowssystem32;C:windowssystem32wbem;D:softwaresCUDA10.0bin;D:softwaresCUDA10.0libnvvp;D:softwaresCUDA10.0libx64;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:windowsSystem32OpenSSH;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program FilesNVIDIA CorporationNVIDIA NvDLISR;C:Program FilesMySQLMySQL Server 8.0bin;D:MySQLMySQL Server 5.5bin;D:softwaresanaconda3graphvizbin;D:Gitcmd;D:softwaresmysql5.6.39bin;d:softwaresanaconda3;d:softwaresanaconda3Librarymingw-w64bin;d:softwaresanaconda3Libraryusrbin;d:softwaresanaconda3Librarybin;d:softwaresanaconda3scripts;C:Usersadminanaconda3;C:Usersadminanaconda3Librarymingw-w64bin;C:Usersadminanaconda3Libraryusrbin;C:Usersadminanaconda3Librarybin;C:Usersadminanaconda3scripts;D:python3.7scripts;D:python3.7;C:UsersadminAppDataLocalMicrosoftWindowsApps;D:办公pycharmPyCharm Community Edition 2020.1.1bin;D:software;C:UsersadminAppDataRoamingnpm;. 2021-12-21 11:49:27,208 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=C:UsersadminAppDataLocalTemp 2021-12-21 11:49:27,209 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=10. 全部程序2021-12-21 11:49:27,209 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Windows 10 2021-12-21 11:49:27,209 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2021-12-21 11:49:27,209 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.0 2021-12-21 11:49:27,209 [myid:] - INFO [main:Environment@100] - Client environment:user.name=admin 2021-12-21 11:49:27,209 [myid:] - INFO [main:Environment@100] - Client environment:user.home=C:Usersadmin 2021-12-21 11:49:27,209 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=D:IdeaProjectsbaizhanzookeeper_demo 2021-12-21 11:49:27,210 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.236.32:2181,192.168.236.33:2181,192.168.236.34:2181 sessionTimeout=30000 watcher=com.bjsxt.api.ZooKeeperTest$1@24273305 2021-12-21 11:49:28,049 [myid:] - INFO [main:ZooKeeperTest@41] - zk:State:ConNECTING sessionid:0x0 local:null remoteserver:null lastZxid:0 xid:1 sent:0 recv:0 queuedpkts:0 pendingresp:0 queuedevents:0 2021-12-21 11:49:28,051 [myid:] - INFO [main-SendThread(192.168.236.33:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.236.33/192.168.236.33:2181. Will not attempt to authenticate using SASL (unknown error) 2021-12-21 11:49:28,052 [myid:] - INFO [main-SendThread(192.168.236.33:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.236.33/192.168.236.33:2181, initiating session 2021-12-21 11:49:28,057 [myid:] - INFO [main-SendThread(192.168.236.33:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.236.33/192.168.236.33:2181, sessionid = 0x27dd573cc600002, negotiated timeout = 30000 2021-12-21 11:49:28,058 [myid:] - INFO [main-EventThread:ZooKeeperTest$1@28] - process:None node30000000002 node1 helloworld hello 2021-12-21 11:49:28,068 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x27dd573cc600002 closed 2021-12-21 11:49:28,068 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down
package com.bjsxt.api; import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; public class ZooKeeperTest { //定义一个zk对象 private ZooKeeper zooKeeper; //session的失效时间 private static final int SESSION_TIMEOUT = 30000; //定义一个Logger类对象 public static final Logger LOGGER = LoggerFactory.getLogger(ZooKeeperTest.class); //定义一个监听器对象watcher private Watcher watcher = new Watcher() { @Override public void process(WatchedEvent event) { LOGGER.info("process:" + event.getType()); } }; @Before public void connect() throws IOException { zooKeeper = new ZooKeeper("192.168.236.32:2181,192.168.236.33:2181,192.168.236.34:2181", SESSION_TIMEOUT, watcher); LOGGER.info("zk:" + zooKeeper); } @After public void close() throws InterruptedException { if (zooKeeper != null) { zooKeeper.close(); } } @Test public void createNode() { String result = null; try { result = zooKeeper.create("/zkNode01", "hello".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); LOGGER.info("create PERSISTENT node zkNode01 result:" + result); result = zooKeeper.create("/zkNode02", "abc".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); LOGGER.info("create EPHEMERAL node zkNode02 result:" + result); Thread.sleep(30000); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } @Test public void deleteNode(){ try { zooKeeper.delete("/zk03",-1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); //抛出AssertionError异常 } } @Test public void getNodeData() { try { byte[] data = zooKeeper.getData("/zkNode01", null, null); LOGGER.info("getData 1----:" + new String(data)); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } try { Thread.sleep(25000); } catch (InterruptedException e) { e.printStackTrace(); } try { byte[] data = zooKeeper.getData("/zkNode01", null, null); LOGGER.info("getData 2----:" + new String(data)); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } } @Test public void getSetDataWatcher() { String result = null; //注册watcher监听 try { System.out.println("get"); byte[] data = zooKeeper.getData("/zkNode01", new Watcher() { @Override public void process(WatchedEvent event) { LOGGER.info("getSetDataWatcher watcher:{}", event.getType()); System.out.println("watcher work!"); getSetDataWatcher(); //事件触发后重新注册watcher监听 } }, null); result = new String(data); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } LOGGER.info("getData result:{}", result); //触发监听事故 try { System.out.println("set1"); zooKeeper.setData("/zkNode01","setData_aaa".getBytes(),-1); System.out.println("set2"); zooKeeper.setData("/zkNode01","setData_bbb".getBytes(),-1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } System.out.println("show over!"); try { Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); } } @Test public void isExists(){ Stat stat = null; try { stat = zooKeeper.exists("/zkNode01", false);//如果watch为True,则绑定定义的监听器对象watcher } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } Assert.assertNotNull(stat); //判断对象是否为空,如果对象为空,会抛出异常 LOGGER.info("node exists,stat version:{}",+stat.getVersion()); } @Test public void setNodeData(){ Stat stat = null; try { //如果节点不存在则会抛出异常 stat = zooKeeper.setData("/zkNode01", "helloworld".getBytes(), -1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } Assert.assertNotNull(stat); //判断对象是否为空,如果对象为空,会抛出异常 LOGGER.info("setNodeData stat:{}",stat); } @Test public void nodeExistsWatcher(){ Stat stat = null; try { //watch=true表明使用定义好的监听对象 stat = zooKeeper.exists("/zkNode01",true); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } Assert.assertNotNull(stat); //判断对象是否为空,如果对象为空,会抛出异常 try { zooKeeper.delete("/zkNode01",-1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } } @Test public void nodeExistsUserDefWatcher(){ Stat stat = null; try { stat = zooKeeper.exists("/zkNode01", new Watcher() { @Override public void process(WatchedEvent event) { LOGGER.info("nodeExistsUserDefWatcher watcher evevt_type:{}",event.getType()); } }); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } Assert.assertNotNull(stat); try { zooKeeper.setData("/zkNode01","update_hello".getBytes(),-1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } try { zooKeeper.delete("/zkNode01",-1); } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } } @Test public void getChildNodes(){ ListchildContentList = new ArrayList<>(); try { List childrens = zooKeeper.getChildren("/zk02", true); for(String children:childrens){ System.out.println(children); //打印节点名称 byte[] data = zooKeeper.getData("/zk02/" + children, null, null); //path:子节点路径 childContentList.add(new String(data)); //将字节数组转化为String并添加到childContentList列表中 } for (String childContent:childContentList){ System.out.println(childContent); } } catch (Exception e) { LOGGER.error(e.getMessage()); Assert.fail(); } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)