ZK(5)——使用ZK原生java API进行客户端开发

一、ZK的配置文件zoo.cfg参数

  • tickTime

    • 基本事件单元,以毫秒为单位。这个时间是作为ZK服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每隔tickTime时间就会发送一个心跳。
  • dataDir

    • 存储内存中数据库快照的位置,顾名思义就是ZK保存数据的目录,默认情况下,ZK将写数据的日志文件也保存在这个目录里。
  • clientPort

    • 这个端口就是客户端连接ZK服务端的端口,ZK会监听这个端口,接受客户端的访问请求
  • initLimit

    • 这个配置项是用来配置ZK接受客户端初始化连接时最长能忍受多少个心跳时间间隔数, 当已经超过10个心跳的时间(也就是tickTime)长度后ZK服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10 * 2000=20 秒
  • syncLimit

    • 这个配置项标志Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime的时间长度,总的时间长度就是 5 * 2000 = 10秒
  • server.A = B:C:D

    • A表示这个是第几号服务器
    • B表示这个服务器的ip地址
    • C表示这个服务器与集群中的Leader服务器交换信息的端口
    • D表示是万一集中的Leader服务器挂了,需要一个端口来重新进行选举, 选出一个新的Leader

二、创建节点ZNode方法:create

提供了两套创建节点的方法,同步和异步创建节点的方式。

2.1 同步创建节点
  • 参数1,节点路径(名称):/nodeName (ZK原生的API是不允许递归创建节点的,也就是说在父节点不存在的情况下,不允许创建子节点)
  • 参数2,节点内容:要求类型是字节数组(也就是说,不支持序列化方式,如果需要实现序列化,可使用java相关序列化框架)
  • 参数3,节点权限:使用Ids.OPEN_ACL_UNSAFE开放权限即可。(这个参数一般在权限没有太高要求的场景下,没必要关注)
  • 参数4,节点类型:创建节点的类型:CreateMode.* 提供四种节点类型
    • 类型一:PERSISTENT(持久节点)
    • 类型二:PERSISTENT_SEQUENTIAL(持久顺序节点)
    • 类型三:EPHEMERAL(临时节点)
    • 类型四:EPHEMERAL_SEQUENTIAL(临时顺序节点)

在这里插入图片描述

如果创建一个zk中已经有的值,那么程序会抛出异常。

在这里插入图片描述

2.2 异步创建节点

异步方式:(在同步参数基础上增加两个参数)

  • 参数5:注册一个异步回调函数,要实现 AsynCallBack.StringCallBack接口。重写 processResult(int rc, String path, Object ctx, String name) 方法,当节点创建完毕后执行此方法。
    • rc:为服务端相应码:0表示调用成功、-4表示端口连接、-110表示指定节点存在、-112表示会话已经过期
    • path:接口调用时传入API的数据节点的路径参数
    • ctx:表示调用接口传入APIctx
    • name:时间在服务器端创建节点的名称
  • 参数6:传递给回调函数的参数,一般为上下文Context信息。

、建立客户端与ZK服务端的连接

在这里插入图片描述

控制台输出结果:

在这里插入图片描述

注意在这里面有一个坑,我也是趟了1个多小时。那就是需要将log4.properties放在src目录下面,且需要将src目录mark as root目录才可以。(如果是使用IDEA编译器的话必须这么做,否则会报日志错误)

在这里插入图片描述

二、ZK会话重连机制

  • 会话连接与恢复

首先用四字命令来进行查看会话

在这里插入图片描述

从上图可以看出来,现在还没有会话

三、同步异步创建ZK节点

  • 节点的增删改查
  • watch与acl的相关操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值