博客
关于我
zookeeper使用
阅读量:339 次
发布时间:2019-03-04

本文共 7273 字,大约阅读时间需要 24 分钟。

zookeeper


文章目录

一、linux客户端命令操作

1.服务端开启

在这里插入图片描述

2.客户端开启

在这里插入图片描述

3.查询操作

在这里插入图片描述

4.创建节点

在这里插入图片描述

5.修改节点

在这里插入图片描述

6.删除节点

在这里插入图片描述

二、使用Curator客户端

1.坐标依赖
<!--curator,zookeeper客户端操作依赖--><dependency>    <groupId>org.apache.curator</groupId>    <artifactId>curator-framework</artifactId>    <version>4.0.0</version></dependency><dependency>    <groupId>org.apache.curator</groupId>    <artifactId>curator-recipes</artifactId>    <version>4.0.0</version></dependency>
2.具体操作
package com.lzb;import org.apache.curator.RetryPolicy;import org.apache.curator.RetrySleeper;import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.framework.api.BackgroundCallback;import org.apache.curator.framework.api.CuratorEvent;import org.apache.curator.retry.ExponentialBackoffRetry;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.data.Stat;import org.junit.Test;import java.util.Arrays;import java.util.List;public class CuratorTest {       @Test    public void create() throws Exception {           CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.31.81:2181", 60 * 1000, 15 * 1000, new ExponentialBackoffRetry(3000, 3));        client.start();        //不支持名称空间,似乎版本有问题?//        client = client.usingNamespace("test");        //创建节点        client.create().forPath("/test/p7", "hhhh".getBytes());        //删除节点        client.delete().forPath("/test");        //创建临时节点        client.create().withMode(CreateMode.EPHEMERAL).forPath("/test/p1");        //创建多级节点        client.create().creatingParentsIfNeeded().forPath("/test2");        client.close();    }    @Test    public void get() throws Exception {           CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.31.81:2181", 60 * 1000, 15 * 1000, new ExponentialBackoffRetry(3000, 3));        client.start();        //查询数据        System.out.println(new String(client.getData().forPath("/test/p2")));        //查询子节点        List<String> list = client.getChildren().forPath("/");        System.out.println(list.toString());        //查询状态信息        Stat stat = new Stat();        client.getData().storingStatIn(stat).forPath("/test/p2");        System.out.println(stat);        client.close();    }    @Test    public void set() throws Exception {           CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.31.81:2181", 60 * 1000, 15 * 1000, new ExponentialBackoffRetry(3000, 3));        client.start();        //修改数据        client.setData().forPath("/test/p1" ,"set".getBytes());        System.out.println(new String(client.getData().forPath("/test/p1")));        //根据版本修改数据        Stat stat = new Stat();        client.getData().storingStatIn(stat).forPath("/test/p2");        client.setData().withVersion(stat.getVersion()).forPath("/test/p2","版本修改".getBytes());        System.out.println(new String(client.getData().forPath("/test/p2")));        client.close();    }    @Test    public void delete() throws Exception {           CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.31.81:2181", 60 * 1000, 15 * 1000, new ExponentialBackoffRetry(3000, 3));        client.start();        //删除节点        client.delete().forPath("/test/p7");        //删除带有字节点的节点        client.delete().deletingChildrenIfNeeded().forPath("/test/p6");        //保证删除节点以及子节点        client.delete().guaranteed().deletingChildrenIfNeeded().forPath("/test/p6");        //删除后的回调函数        client.delete().guaranteed().deletingChildrenIfNeeded().inBackground(new BackgroundCallback() {               @Override            public void processResult(CuratorFramework client, CuratorEvent curatorEvent) throws Exception {                   System.out.println(curatorEvent);            }        }).forPath("/test/p5");        client.close();    }}
这里名称空间不能设置,有人看到了能回答下吗?

在这里插入图片描述

3.节点监听机制
package com.lzb;import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.framework.api.BackgroundCallback;import org.apache.curator.framework.api.CuratorEvent;import org.apache.curator.framework.recipes.cache.*;import org.apache.curator.retry.ExponentialBackoffRetry;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.data.Stat;import org.junit.Test;import java.util.List;public class CuratorWatcherTest {       @Test//单节点监听    public void nodeCache() throws Exception {           CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.31.81:2181", 60 * 1000, 15 * 1000, new ExponentialBackoffRetry(3000, 3));        client.start();        NodeCache nodeCache = new NodeCache(client, "/test/p1");        nodeCache.getListenable().addListener(new NodeCacheListener() {               @Override            public void nodeChanged() throws Exception {                   System.out.println("/test/p1变化了");                ChildData currentData = nodeCache.getCurrentData();                System.out.println(currentData);                System.out.println(new String(currentData.getData()));            }        });        nodeCache.start(true);        while (true) {           }    }    @Test//子节点监听    public void pathChildCache() throws Exception {           CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.31.81:2181", 60 * 1000, 15 * 1000, new ExponentialBackoffRetry(3000, 3));        client.start();        PathChildrenCache cache = new PathChildrenCache(client, "/test", true);        cache.getListenable().addListener(new PathChildrenCacheListener() {               @Override            public void childEvent(CuratorFramework framework, PathChildrenCacheEvent event) throws Exception {                   System.out.println("/test/变化了");                PathChildrenCacheEvent.Type type = event.getType();                if (type.equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)) {                       System.out.println(new String(event.getData().getData()));                }            }        });        cache.start();        while (true) {           }    }    @Test//节点树监听    public void treeCache() throws Exception {           CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.31.81:2181", 60 * 1000, 15 * 1000, new ExponentialBackoffRetry(3000, 3));        client.start();        TreeCache cache = new TreeCache(client,"/test");        cache.getListenable().addListener(new TreeCacheListener() {               @Override            public void childEvent(CuratorFramework curatorFramework, TreeCacheEvent event) throws Exception {                   System.out.println("节点树变化了");                System.out.println(event);            }        });        cache.start();        while (true) {                   }    }}
4.分布式锁
获取锁原理:所有消费者在同一个节点lock下创建自己的临时顺序节点,再判断自己的锁节点值是否最小,最小则获取到锁。否则监听任意一个更小的锁节点,当其删除时再判断自己的锁节点值,重复此动作。临时是为了能够及时释放锁,顺序是为了为了监听判断。
InterProcessMutex mutex= new InterProcessMutex(client,"/lock");mutex.acquire(3,TimeUnit.SECONDS);mutex.release();
5.集群搭建
集群搭建:在data目录下创建一个myid文件,写入对应编号集群搭建:在zoo.cfg文件内声明集群,以下三个范例集群搭建:server.1=192.168.31.81:2881:3881  集群搭建:server.2=192.168.31.82:2881:3881集群搭建:server.3=192.168.31.83:2881:3881集群角色leader、follower、observerleader:事务操作,同步状态follower:查询操作,事务转发,选举投票observer:查询操作,事务转发,不参与投票

总结

zookeeper是分布式应用程序的协调服务,它具有:①配置中心组件,用来分布公有的配置信息;②分布式锁,用来实现不同机器之间使用同一把锁; ③集群管理,作为注册中心来使用

转载地址:http://agwr.baihongyu.com/

你可能感兴趣的文章
总结了一下c/c++函数和变量的命名规则
查看>>
关于构造函数内调用虚函数的问题
查看>>
最短路径问题—Dijkstra算法
查看>>
求二叉树的深度
查看>>
录音功能
查看>>
c++面经基础知识汇总(类型转换、new/delete/malloc/free、什么是RTTI)
查看>>
mysql时间相关函数和操作
查看>>
万物皆可爬系列查看翻页翻到最后是什么
查看>>
python scrapy
查看>>
pymongo的使用
查看>>
A Guide to Node.js Logging
查看>>
前端基础知识学习FreeCodeCamp
查看>>
css的一些基础知识
查看>>
webwxbatchgetcontact一个神奇的接口
查看>>
Edge浏览器:你的的内核我的芯
查看>>
chrome浏览器功能介绍
查看>>
linux shell 读取文件脚本
查看>>
git命令升级版用法
查看>>
sed常用命令
查看>>
linux下各种小命令
查看>>