zookeeper官方学习(一)

    以前很少写blog 的  一来公司项目忙 二是自己觉得文字表达能力表达有限 也就没写了  但是写blog 是个很好记录自己学习的习惯方式  这种习惯要好好的保持下去 和大家分享自己的所学 共同进步   话不多说  正文开始。

  公司的java服务都是分模块服务的  一个系统拆开成很多的子模块  各个模块做自己业务的事情  这些服务都部署了几套  放在不同的服务器上,服务之间存在互相的调用 现在市面上rpc服务框架很多 如 阿里的dubbo  Facebook的thrift  很多很多  我就不说了  我们公司采用的esb  即tlv协议进行服务之间的通信。


但唯一的遗憾 虽然系统服务拆成了很具体的模块 但公司的负载均衡一直采用第三方的服务  由于服务都是挂在UCloud 或者阿里云服务上   由于这两家运营商都提供了现成了负载均衡服务  阿里云的SLB负载均衡算法  UCloud也有。最近我们想自己做一个自己的服务 提供这种的分布式服务。监控各个服务的状态,看了dubbo  ZK 最后选择了zk作为我们本身的分布式服务框架。


看了Zookeeper官网  zkClient可以支持很多的语言 相对比较成熟  C Python java 都支持。


参照他们提供的例子 自己试着写了几个例子  写下来 so simple


/**
 * zk 客户端 连接方法
 * @param host
 * @return
 */
public ZooKeeper connect(String host)
{
    try
    {
        zk = new ZooKeeper(host,3000,new Watcher()
        {
            public void process(WatchedEvent watchedEvent)
            {
                if(watchedEvent.getState() == Event.KeeperState.SyncConnected)
                {
                   countSingal.countDown();
                }
            }
        });
        countSingal.await();
        return zk;
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
return null;
}


/**
 * 创建节点
 * @param path
 * @param data
 */
public void createNode(String path,byte[] data)
{

    try {
        zk.create(path,data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    } catch (KeeperException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

/**
 * 修改节点数据
 *
 */
public void updateNode(String path,byte[] data)
{
    try {
        zk.setData(path,data,zk.exists(path,true).getVersion());
    } catch (KeeperException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

/**
 * 删除节点数据
 */

public void deleteNode(String path)
{
    try {
        zk.delete(path,zk.exists(path,true).getVersion());
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (KeeperException e) {
        e.printStackTrace();
    }
}

/**
 * 获取节点数据
 */
public byte[] getData(String path)
{
    try {
        return zk.getData(path,true,zk.exists(path,true));
    } catch (KeeperException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return  null;
}


此时获取zk连接 增加znode  修改znode  删除znode方法已经结束

在main方法中 调用如下 即可看到相关的数据

try
{
    ZKConnect zc = new ZKConnect();
    ZooKeeper zooKeeper  =   zc.connect("127.0.0.1:2181"); //获取ZK连接

    //获取节点数据
    List<String> allNodes =  zooKeeper.getChildren("/",true);
    for(String node:allNodes)
    {
        System.out.println("根节点为:"+node);
    }

    //创建节点
    String  createNode = "/second";
    String createData = "second-data";
    zc.createNode(createNode,createData.getBytes());

    //修改节点数据
    String updateNode = "/second";
    String updateData = "second-updateData";
    zc.updateNode(updateNode,updateData.getBytes());


    //删除节点
    String deleteNode = "/second";
   // zc.deleteNode(deleteNode);


}
catch (KeeperException e)
{
   e.getMessage();
}
catch (InterruptedException e)
{
  e.getMessage();
}


此时一个simple 的zk 例子就完成了  本人表达不好 请见谅

 本人只给了一个简简单单的zk例子 没有具体介绍zk的结构和概念  安装   具体的代码 等等  后续会慢慢的给大家介绍   这是我也是从官网上一步一步来的  

最后 吐槽一下 由于本人英文确实不好 只过了个四级 看英文确实吃力  很多专业单词不认识  得加强英文了



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值