zookeeper|zookeeper的简单例子带你认识zk的API

下面先写个简单的例子,把一个字符串写入到zookeeper当中。
第一步,先引入pom依赖如下:

org.apache.zookeeper zookeeper 3.4.6

第二步,上代码:
package mypackage; import org.apache.zookeeper.data.Stat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.concurrent.CountDownLatch; public class LoadDataToZooKeeper { private static final Logger logger = LoggerFactory.getLogger(LoadDataToZooKeeper.class); public static String hosts = ""; private static final int SESSION_TIMEOUT = 5000; protected CountDownLatch connectedSignal = new CountDownLatch(1); protected static ZooKeeper zk; // 连接zk public void connect() { try { zk = new ZooKeeper(hosts,SESSION_TIMEOUT, new ConnWatcher()); } catch (IOException e) { logger.info("zk连接失败!"); e.printStackTrace(); } } //监听 public class ConnWatcher implements Watcher{ public void process(WatchedEvent event) { // 连接建立, 回调process接口时, 其event.getState()为KeeperState.SyncConnected if (event.getState() == Event.KeeperState.SyncConnected) { // 放开闸门, wait在connect方法上的线程将被唤醒 connectedSignal.countDown(); } } }public void loadToZK(String content) throws IOException { connect(); //获得与zk的连接 try { if(zk.exists("/xx/xx/parentNode", false) == null) { // 父节点不存在时创建 zk.create("/xx/xx/parentNode","xxxx".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } Stat stat = zk.exists("/xx/xx/parentNode/sonNode", false); if(stat == null){//节点不存在时创建 zk.create("/xx/xx/parentNode/sonNode", content.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } else { //节点存在时写入 zk.setData("/xx/xx/parentNode/sonNode", content.getBytes(),-1); }} catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); logger.info("zk判断结点存在时异常!"); }}public static void main(String[] args) throws IOException {LoadDataToZooKeeper obj = new LoadDataToZooKeeper(); hosts = args[0]; // 你的zk所在ip,如:127.0.0.1:443 String content = "test..."; //获得mysql或文件中数据,这些数据是你要写到zookeeper中的 obj.loadToZK(content); } }


其实zookeeper很简单,简单到它只有不到10个api方法:
  • String create(final String path, byte data[], List acl, CreateMode createMode)
作用:
创建znode节点,
参数:
path: 要写到zk哪个路径上
data: 要写哪些数据,把这些数据变成字节码
acl: 访问控制列表
createMode: 节点的类型,临时、顺序或两者。这是一个枚举
  • void delete(final String path, int version)
作用:
删除某个节点
参数:
path: 节点路径
version: znode的当前版本
  • Stat exists(final String path, Watcher watcher)
作用:
判断zk节点是否存在
参数:
path: 节点路径
watcher: 监听,当这个znode节点被改变时,会触发当前watcher
  • Stat setData(final String path, byte data[], int version)
作用:
向节点中写入数据
参数:
path: 节点路径
data: 要写的数据(需要字节化)
version: znode的当前版本。每当数据更改时,zk会更新znode的版本号。

  • byte[] getData(final String path, Watcher watcher, Stat stat)
作用:
从指定的znode获取数据
参数:
path: znode路径
watcher: 监视器类型的回调函数。
stat: 返回znode的元数据。
  • List getChildren(final String path, Watcher watcher)
作用:
获取指定znode中的所有子节点
参数:
path: znode路径
watcher: 监视器类型的回调函数。

喜欢的话,请微信扫描下方二维码关注我!感谢支持!
zookeeper|zookeeper的简单例子带你认识zk的API
文章图片

【zookeeper|zookeeper的简单例子带你认识zk的API】

    推荐阅读