知识点
相关文章
更多最近更新
更多如何使用Cruator监听zookeeper事件变化 - 三劫散仙
2019-03-14 22:53|来源: 网路
掌握zookeeper事件监听机制,非常重要,可以说是跨入了进阶的门槛,只有掌握了如何监听某个节点或路径,我们才能在节点变化后,做一些我们想做的事,包括:
1,配置文件同步
2,主从切换
3,分布式队列
4,分布式锁
5,其他
散仙,在以前的文章里面有写过使用zookeeper原生的api,监听zk节点变化,那么本篇我们就来看下,如何使用curator来完成监听,代码如下:
package com.qin.curator.zk; import javax.sound.midi.Patch; import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.CuratorFrameworkFactory.Builder; import org.apache.curator.framework.api.CuratorWatcher; import org.apache.curator.framework.recipes.cache.NodeCache; import org.apache.curator.framework.recipes.cache.NodeCacheListener; import org.apache.curator.framework.recipes.cache.PathChildrenCache; import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent; import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener; import org.apache.curator.retry.ExponentialBackoffRetry; import org.apache.curator.utils.ZKPaths; import org.apache.zookeeper.WatchedEvent; /** * * 使用curator监听zookeeper节点 * @author qindongliang * **/ public class CuratorWatch { static CuratorFramework zkclient=null; static String nameSpace="php"; static { String zkhost="192.168.46.22:2181";//zk的host RetryPolicy rp=new ExponentialBackoffRetry(1000, 3);//重试机制 Builder builder = CuratorFrameworkFactory.builder().connectString(zkhost) .connectionTimeoutMs(5000) .sessionTimeoutMs(5000) .retryPolicy(rp); builder.namespace(nameSpace); CuratorFramework zclient = builder.build(); zkclient=zclient; zkclient.start();// 放在这前面执行 zkclient.newNamespaceAwareEnsurePath(nameSpace); } public static void main(String[] args) throws Exception{ watch(); Thread.sleep(Long.MAX_VALUE); } /** * * 监听节点变化 * * */ public static void watch()throws Exception{ PathChildrenCache cache = new PathChildrenCache(zkclient, "/zk", false); cache.start(); System.out.println("监听开始/zk........"); PathChildrenCacheListener plis=new PathChildrenCacheListener() { @Override public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception { switch ( event.getType() ) { case CHILD_ADDED: { System.out.println("Node added: " ZKPaths.getNodeFromPath(event.getData().getPath())); break; } case CHILD_UPDATED: { System.out.println("Node changed: " ZKPaths.getNodeFromPath(event.getData().getPath())); break; } case CHILD_REMOVED: { System.out.println("Node removed: " ZKPaths.getNodeFromPath(event.getData().getPath())); break; } } } }; //注册监听 cache.getListenable().addListener(plis); } }
运行后的控制台打印:
18:33:07.722 [main] INFO o.a.c.f.imps.CuratorFrameworkImpl - Starting 18:33:07.727 [main] DEBUG o.a.curator.CuratorZookeeperClient - Starting 18:33:07.727 [main] DEBUG org.apache.curator.ConnectionState - Starting 18:33:07.727 [main] DEBUG org.apache.curator.ConnectionState - reset 18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT 18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:host.name=QINDONGLIANG.dhgatecn.msf 18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:java.version=1.7.0_04 18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:java.vendor=Oracle Corporation 18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:java.home=D:\Java\jdk1.7.0_04\jre 18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:java.class.path=D:\eclipseworkspace2yw\opzk\bin;D:\eclipseworkspace2yw\opzk\lib\curator-client-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-examples-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-framework-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-recipes-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-test-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-x-discovery-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-x-discovery-server-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-x-rpc-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\log4j-1.2.15.jar;D:\eclipseworkspace2yw\opzk\lib\zookeeper-3.4.5.jar;D:\eclipseworkspace2yw\opzk\lib\commons-io-2.1.jar 18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:java.library.path=D:\Java\jdk1.7.0_04\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:/Java/jdk1.7.0_04/bin/../jre/bin/server;D:/Java/jdk1.7.0_04/bin/../jre/bin;D:/Java/jdk1.7.0_04/bin/../jre/lib/amd64;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;D:\Java\jdk1.7.0_04\bin;D:\Java\jdk1.7.0_04\jre\bin;D:\apache-ant-1.9.3\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Lenovo\Lenovo Home\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files\TortoiseSVN\bin;D:\hadoop-2.2.0/bin;C:\MyProgramFiles\apache-maven-3.0.5\bin;D:\python;E:\eclipse;;. 18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:java.io.tmpdir=C:\Users\QINDON~1\AppData\Local\Temp\ 18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:java.compiler=<NA> 18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:os.name=Windows 7 18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:os.arch=amd64 18:33:07.735 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:os.version=6.1 18:33:07.735 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:user.name=qindongliang 18:33:07.735 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:user.home=C:\Users\qindongliang 18:33:07.735 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:user.dir=D:\eclipseworkspace2yw\opzk 18:33:07.735 [main] INFO org.apache.zookeeper.ZooKeeper - Initiating client connection, connectString=192.168.46.22:2181 sessionTimeout=5000 watcher=org.apache.curator.ConnectionState@2c351b05 18:33:07.738 [main] DEBUG org.apache.zookeeper.ClientCnxn - zookeeper.disableAutoWatchReset is false 18:33:07.760 [main-SendThread(192.168.46.22:2181)] INFO org.apache.zookeeper.ClientCnxn - Opening socket connection to server 192.168.46.22/192.168.46.22:2181. Will not attempt to authenticate using SASL (unknown error) 18:33:07.761 [main-SendThread(192.168.46.22:2181)] INFO org.apache.zookeeper.ClientCnxn - Socket connection established to 192.168.46.22/192.168.46.22:2181, initiating session 18:33:07.762 [main-SendThread(192.168.46.22:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Session establishment request sent on 192.168.46.22/192.168.46.22:2181 18:33:07.766 [main-SendThread(192.168.46.22:2181)] INFO org.apache.zookeeper.ClientCnxn - Session establishment complete on server 192.168.46.22/192.168.46.22:2181, sessionid = 0x148ac15236f0046, negotiated timeout = 5000 18:33:07.771 [main-EventThread] INFO o.a.c.f.state.ConnectionStateManager - State change: CONNECTED 18:33:08.784 [main-SendThread(192.168.46.22:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x148ac15236f0046, packet:: clientPath:null serverPath:null finished:false header:: 1,3 replyHeader:: 1,233,0 request:: '/php,F response:: s{117,117,1411712541330,1411712541330,0,5,0,0,0,3,204} 18:33:08.784 [main-SendThread(192.168.46.22:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x148ac15236f0046 after 4ms 监听开始/zk........ 18:33:08.795 [main-SendThread(192.168.46.22:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x148ac15236f0046, packet:: clientPath:null serverPath:null finished:false header:: 2,3 replyHeader:: 2,233,0 request:: '/php,F response:: s{117,117,1411712541330,1411712541330,0,5,0,0,0,3,204} 18:33:08.797 [main-SendThread(192.168.46.22:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x148ac15236f0046, packet:: clientPath:null serverPath:null finished:false header:: 3,3 replyHeader:: 3,233,0 request:: '/php/zk,F response:: s{151,182,1411714954448,1411716422668,2,5,0,0,9,3,228} 18:33:08.804 [main-SendThread(192.168.46.22:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x148ac15236f0046, packet:: clientPath:/php/zk serverPath:/php/zk finished:false header:: 4,12 replyHeader:: 4,233,0 request:: '/php/zk,T response:: v{'bb,'cc,'cc334},s{151,182,1411714954448,1411716422668,2,5,0,0,9,3,228} 18:33:08.815 [main-SendThread(192.168.46.22:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x148ac15236f0046, packet:: clientPath:/php/zk/bb serverPath:/php/zk/bb finished:false header:: 5,4 replyHeader:: 5,233,0 request:: '/php/zk/bb,T response:: #6920616d2061207a6b20636f6e74656e742031,s{152,156,1411714954452,1411714982893,2,0,0,0,19,0,152} 18:33:08.816 [main-SendThread(192.168.46.22:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x148ac15236f0046, packet:: clientPath:/php/zk/cc serverPath:/php/zk/cc finished:false header:: 6,4 replyHeader:: 6,233,0 request:: '/php/zk/cc,T response:: #63313163,s{185,222,1411716737805,1411725726750,3,0,0,0,4,0,185} 18:33:08.817 [main-SendThread(192.168.46.22:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x148ac15236f0046, packet:: clientPath:/php/zk/cc334 serverPath:/php/zk/cc334 finished:false header:: 7,4 replyHeader:: 7,233,0 request:: '/php/zk/cc334,T response:: #636363,s{189,226,1411716744253,1411725775109,2,3,0,0,3,3,220} Node added: bb Node added: cc Node added: cc334 18:33:10.482 [main-SendThread(192.168.46.22:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x148ac15236f0046 after 1ms 18:33:12.148 [main-SendThread(192.168.46.22:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x148ac15236f0046 after 1ms
用到的jar包如下所示:
转自:http://qindongliang.iteye.com/blog/2122810
相关问答
更多-
昆明那里有仙4买[2022-01-04]
仙剑系列昆明全部经销地址: 昆明黑马总店 圆通北路84号 南平店 南平街新华书店2楼 威豪软件联想1+1专卖店 昆明市圆通北路8号 民院电脑城店 昆明市大街圆西南民院电脑城一楼B6号 新闻书城批发专卖 昆明市新闻路441号(图书批发城对面) 连邦圆西店 昆明市圆通北路110号 昆明创想软件 昆明市民航路669号 昆明真友软件 昆明市人民中路如意巷9号附1号 昆明云报书刊发行有限公司 新闻路图书批发市场1-3号 昆明开恩达软件技术服务公司 昆明市圆通北路4号 宜良维特科技公司 昆明宜良政府东大门 昆明科星软件 ... -
关于JAVA中事件监听实现的问题。急~!!~!~[2022-02-17]
lz你要明白观察者模式就可以了 这个是我写的 事件、事件源和观察者 明白这个你就明白事件监听了 事件 package test; public class Event { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Event(String name) { super(); this.name = name ... -
如何使用epoll监听文件的变化[2022-04-04]
epoll的接口非常简单,一共就三个函数: 1. int epoll_create(int size); 创建一个epoll的句柄,size用来告诉内核这个监听的数目一共有多大。这个参数不同于select()中的第一个参数,给出最大监听的fd+1的值。需要注意的是,当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看/proc/进程id/fd/,是能够看到这个fd的,所以在使用完epoll后,必须调用close()关闭,否则可能导致fd被耗尽。 2. int epoll_ctl(int ... -
九仙登录问题[2022-01-01]
清楚系统缓存,然后重启电脑,重新的登录。 -
如何使用Curator监听zookeeper事件变化[2023-10-28]
掌握zookeeper事件监听机制,非常重要,可以说是跨入了进阶的门槛,只有掌握了如何监听某个节点或路径,我们才能在节点变化后,做一些我们想做的事,包括: 1,配置文件同步 2,主从切换 3,分布式队列 4,分布式锁 5,其他 散仙,在以前的文章里面有写过使用zookeeper原生的api,监听zk节点变化,那么本篇我们就来看下,如何使用curator来完成监听,代码如下: package com.qin.curator.zk; import javax.sound.midi.Patch; impo ... -
如何使用Cruator监听zookeeper事件变化[2022-12-15]
掌握zookeeper事件监听机制,非常重要,可以说是跨入了进阶的门槛,只有掌握了如何监听某个节点或路径,我们才能在节点变化后,做一些我们想做的事,包括: 1,配置文件同步 2,主从切换 3,分布式队列 4,分布式锁 5,其他 散仙,在以前的文章里面有写过使用zookeeper原生的api,监听zk节点变化,那么本篇我们就来看下,如何使用curator来完成监听,代码如下: package com.qin.curator.zk; import javax.sound.midi.Patch; impo ... -
如何使用Cruator监听zookeeper事件变化[2024-02-25]
解决方案: recipes;zk; import org; class="/.curator.namespace(nameSpace).PathChildrenCache:java;opzk\lib\ 放在这前面执行 zkclient.zookeeper.curator.connectString(zkhost) ;opzk\eclipseworkspace2yw\zookeeper-3.zookeeper.connectionTimeoutMs(5000) .apache.0.6.6.apache.Pat ... -
如何使用Curator监听zookeeper事件变化[2023-09-30]
掌握zookeeper事件监听机制,非常重要,可以说是跨入了进阶的门槛,只有掌握了如何监听某个节点或路径,我们才能在节点变化后,做一些我们想做的事,包括: 1,配置文件同步 2,主从切换 3,分布式队列 4,分布式锁 5,其他 散仙,在以前的文章里面有写过使用zookeeper原生的api,监听zk节点变化,那么本篇我们就来看下,如何使用curator来完成监听,代码如下: package com.qin.curator.zk; import javax.sound.midi.Patch; impo ... -
当表中没有实际变化时,Laravel Eloquent会监听事件(Laravel Eloquent listen events when there aren't actually changes in table)[2024-03-14]
你可以创建自定义事件, 这里是官方文档! You can create custom event, here official docs!