curator之zk节点操作

        Curator是一套Zookeeper客户端框架,由Netflix公司开源,类似ZkClient,Curator封装了Zookeeper很多底层的工功能,包括连接重试、反复注册和NodeExistsException异常,如此极大的方便了开发人员使用,能更多的聚焦于业务逻辑上,而不是zk如何实现集群的创建、维护上。

        使用前首先在项目中引入对应的jar架包,需要注意Curator和Zookeeper版本兼容问题,可以参考这篇博文:https://blog.csdn.net/weixin_30347009/article/details/97020426,否则在实际运行的时候会报错。

<dependency>

<groupId>org.apache.curator</groupId>

<artifactId>curator-framework</artifactId>

<version>2.8.0</version>

</dependency>

<dependency>

<groupId>org.apache.curator</groupId>

<artifactId>curator-recipes</artifactId>

<version>2.8.0</version>

现在可以开始使用Curator了,先看看如何使用Curator建立zk连接并实现节点的新增、删除、修改、查询:

  1. 节点操作

   先来看看怎样使用Curator建立一个ZK的会话连接,Curator使用了Fluent风格的API接口来创建会话,创建会话前初始化重试策略,提供的重试实现有ExponentialBackoffRetry、RetryNTimes、RetryOneTimes、RetryUtilElapse,本次使用ExponentialBackoffRetry实现连接重试,ExponentialBackoffRetry(1000, 3)参数1000单位ms,初始sleep时间,3代表最大重试次数。

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
// 创建zk连接
CuratorFramework client = CuratorFrameworkFactory.builder()
	   .connectString(connectString)
	   .connectionTimeoutMs(5000)
	   .retryPolicy(retryPolicy)
	   .sessionTimeoutMs(3000)
	   .build();

client.start();

client初始化后,会话连接其实还没有建立。在调用start()后才开始建立会话连接,接下来便可以开始创建zk节点:

(1)创建一个临时界节点,临时节点在会话断开后会被删除,在不设置节点属性的情况,默认创建的是持久节点(不要忘记点开zk服务)

client.create().withMode(CreateMode.EPHEMERAL).forPath("/path", "1222".getBytes()); // 临时节点
client.create().withMode(CreateMode.EPHEMERAL_SEQUENTIAL).forPath("/path", "1222".getBytes()); // 临时有序节点

(2)创建持久节点

client.create().withMode(CreateMode.PERSISTENT).forPath("/path", "1222".getBytes()); // 创建持久节点
client.create().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath("/path", "1222".getBytes()); // 创建持久有序节点

(3)查看创建的节点,获取节点数据

String pointInfo = new String(client.getData().forPath("/path")); // 查看节点内容

(4)修改节点的内容

client.setData().forPath("/path", "克林特.伊斯特伍德".getBytes()); // 修改节点的内容

(5)删除节点

client.delete().forPath("/path"); // 删除节点

以上就是使用Curator实现zk节点的简单操作,以上使用的都是Curator提供的同步接口,Curator还提供了异步接口可供使用:下面进行简单的尝试。

(6)异步创建zk连接,当创建节点后会回调processResult,通过processResult可以将对应的事件的code和类型获取

public static void main(String[] args) throws Exception {
		client.start();
		client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)
		.inBackground(new BackgroundCallback() {
			
        @Override
        public void processResult(CuratorFramework arg0, CuratorEvent event) throws Exception {
	       System.out.println("Code:" + event.getResultCode() + "Type:" + event.getType());
		}
		}).forPath("/Zookpeer", "init".getBytes()); // 创建一个持久节点
		

       client.delete().deletingChildrenIfNeeded()
       .inBackground(new BackgroundCallback() {
			
		@Override
		public void processResult(CuratorFramework arg0, CuratorEvent event) throws Exception {
				System.out.println("Code:" + event.getResultCode() + "Type:" + event.getType());
		}
		}).forPath("/Zookpeer"); // 删除持久节点

        Thread.sleep(90);
	}

 

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值