`
xkorey
  • 浏览: 153454 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

zookeeper-server-client 简单例子

阅读更多
客户端将初始值加1,然后写入server。
2个客户端输出的值的顺序是一致的。 说明客户端可已感知其他客户端的处理结果。


github 地址
https://github.com/noobthinker/zookeeper-simple-demo

贴代码区域

server
public class Server {

    NIOServerCnxnFactory serverCnxnFactory;

    public void zkStart(Conf conf) throws IOException, InterruptedException {
        ZooKeeperServer zkServer = new ZooKeeperServer();
        File dataDirectory = new File(conf.DIR);
        FileTxnSnapLog ftxn = new FileTxnSnapLog(dataDirectory, dataDirectory);
        zkServer.setTxnLogFactory(ftxn);
        zkServer.setTickTime(conf.TICK_TIME);
        serverCnxnFactory = new NIOServerCnxnFactory();
        serverCnxnFactory.configure(new InetSocketAddress(conf.PORT), conf.MAX_CLIENT_CONNECTIONS);
        serverCnxnFactory.startup(zkServer);
    }
}


client
public class Client implements Watcher, AsyncCallback.StatCallback {

    ZooKeeper zk;
    boolean dead;
    String znode;
    Stat stat;
    int index;

    public void initZkClient(String ipport,int timetout,String znode) {
        try {
            this.znode = znode;
            zk = new ZooKeeper(ipport, timetout, this);
            stat = zk.exists(znode, false);
            if(null == stat){
                zk.create(znode,new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
                        CreateMode.PERSISTENT);
            }
            zk.getData(znode,this,stat);
        } catch (IOException e) {
            e.printStackTrace();
        }catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public void processResult(int rc, String s, Object o, Stat stat) {
        boolean exists;
        switch (rc) {
            case KeeperException.Code.Ok:
                exists = true;
                break;
            case KeeperException.Code.NoNode:
                exists = false;
                break;
            case KeeperException.Code.SessionExpired:
            case KeeperException.Code.NoAuth:
                dead = true;
                return;
            default:
                zk.exists(znode, true, this, null);
                return;
        }

        byte b[] = null;
        if (exists) {
            try {
                b = zk.getData(znode, false, null);
                System.out.println(new String(b));
            } catch (KeeperException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                return;
            }
        }
    }

    public void process(WatchedEvent event) {
        String path = event.getPath();
        if (event.getType() == Event.EventType.None) {
            switch (event.getState()) {
                case SyncConnected:
                    break;
                case Expired:
                    dead = true;
                    break;
            }
        } else {
            if (path != null && path.equals(znode)) {
                zk.exists(znode, true, this, null);
            }
        }
    }

    public void dataMaker(int i){
        index=i;
        int max=index+10;
        boolean run=true;
        while(run){
            try {
                zk.setData(znode, ((index++) + "").getBytes(), -1);
                Thread.sleep(50);
                if(index>max){
                    run=false;
                    zk.close();
                }
            } catch (KeeperException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}


conf
public class Conf {
    public String DIR;
    public int TICK_TIME;
    public int PORT;
    public int MAX_CLIENT_CONNECTIONS;
}



test 类

server
public class ZkServer {
    public static void main(String[]args){
        Conf conf = new Conf();
        conf.DIR="/zookeeper";
        conf.PORT=22801;
        conf.TICK_TIME=2000;
        conf.MAX_CLIENT_CONNECTIONS=60;
        Server srv = new Server();
        try {
            srv.zkStart(conf);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

client1
public class ZkClient1 {
    public static void main(String[]args){
        Client client = new Client();
        client.initZkClient("localhost:22801",3000,"/zka");
        client.dataMaker(0);
    }
}

client1 输出
 0 20 1 21 2 22 3 23 4 24 5 25 6 26 7 27 8 28 9 29 10 30


client2
public class ZkClient2 {
    public static void main(String[]args){
        Client client = new Client();
        client.initZkClient("localhost:22801",3000,"/zka");
        client.dataMaker(20);
    }
}


client2输出
20 1 21 2 22 3 23 4 24 5 25 6 26 7 27 8 28 9 29 10 30


2个端输出一致。
分享到:
评论

相关推荐

    zookeeper-3.4.6环境配置

    - `clientPort`:客户端连接Zookeeper服务器的端口号,默认是2181。 - `tickTime`:Zookeeper的基本时间单位,用于心跳检测和其他内部定时任务,通常设置为2000毫秒。 - `initLimit`:初始化同步时,follower与...

    zookeeper集群模式部署.pdf

    `tickTime` 设定了基础时间单位,`initLimit` 和 `syncLimit` 分别是集群初始化同步和心跳同步的限制,`clientPort` 是客户端连接 ZooKeeper 的端口,而 `dataDir` 和 `dataLogDir` 分别是数据文件和日志文件的存储...

    zookeeper安装包,Linux环境安装包

    同时,如果需要多个ZooKeeper实例在同一台机器上运行,还需要设置不同的客户端连接端口(`clientPort`)。 4. **创建myid文件**:在`dataDir`目录下创建一个名为`myid`的文件,里面写入该ZooKeeper实例的ID(1到255...

    linux-zk3.6.1-单机安装.docx

    2. `clientPort`:这是ZooKeeper对外提供服务的端口,默认是2181,可保持不变。 完成配置后,保存并关闭文件。 现在我们可以启动ZooKeeper服务了。使用`zkServer.sh`脚本的`start`命令: ```bash sh bin/zkServer....

    zookeeper集群安装文档.docx

    在这个例子中,我们有三台服务器,IP地址分别为192.168.114.102、103和104,主机名为yz-yf-zookeeper01、02和03。为了运行Zookeeper,每台服务器都需要安装JDK 6或更高版本,因为Zookeeper依赖于Java环境。在配置...

    ZooKeeper注册中心安装详细步骤(单节点).docx

    `dataDir` 指定Zookeeper数据文件的位置,`dataLogDir` 是日志文件的存放路径,而`clientPort` 是客户端连接Zookeeper服务器的端口。在`server.A=B:C:D`配置中,A是服务器标识,B是服务器IP或主机名,C是用于集群...

    云计算基础架构-ZooKeeper集群部署.pptx

    特别地,设置`dataDir`、`clientPort`以及`server.x`参数,其中`x`对应于每个节点的编号,`2888`是选举端口,`3888`是同步端口。 **ZooKeeper配置详解:** - **tickTime**:这是ZooKeeper的时间单位,用于心跳检测...

    node-pigeon-client:Node.js 的纯 Javascript Pigeon 客户端

    节点鸽子客户端 该模块旨在类似于 Pigeon Java 客户端 API,但进行了一些调整以遵循 Node...zkserver = 127.0.0.1:2181 # Zookeeper host and port. 例子 远程服务“EchoService”: public class EchoService { pub

    自动化部署ZK Shell脚本

    1. **Zookeeper安装包**:在这个例子中,我们使用的是`zookeeper3.8.0`,包含了Zookeeper的二进制文件。 2. **Shell脚本**:用于执行自动化部署任务,如解压安装包、配置环境变量、启动和停止Zookeeper服务等。 接...

    Shell脚本实现自动安装zookeeper

    服务器列表可以是IP地址或格式为`ip:serverPort:appPort`的组合,其中`serverPort`是Zookeeper服务器之间的通信端口,`appPort`是与其他应用程序通信的端口。 脚本会遍历服务器列表,通过SSH无密码登录到每一台机器...

    Kafka 配置用户名密码例子

    --authorizer-properties zookeeper.connect=localhost:2181 \ --add --allow-principal User:client-user --topic my-topic ``` 4. **启动与测试**: - 更新配置后,重启Kafka集群和服务。 - 使用SASL/PLAIN...

    hbase- java开发连接工具类

    除了`hbase-client.jar`,可能还包含其他相关的JAR包,如`hbase-common.jar`,它包含了HBase的通用工具和模块,`hbase-server.jar`包含RegionServer所需的服务端代码,以及`hbase-protocol.jar`包含客户端和服务器...

    dubbo 例子大全

    【标题】"dubbo 例子大全" 涵盖了基于Dubbo框架的全面示例,旨在帮助开发者深入理解和实践Dubbo的核心功能。Dubbo是中国阿里巴巴开源的一款高性能、轻量级的服务治理框架,它主要应用于分布式系统的微服务架构中,...

    Hbase安装指南

    1. **Client**:客户端通过RPC(Remote Procedure Call)与HBase交互,既可以直接与HMaster通信进行管理操作,也可以直接与HRegionServer通信进行数据读写。 2. **Zookeeper**:Zookeeper集群在HBase中扮演着至关...

    solr 集群搭建1

    Zookeeper的配置文件中,`dataDir`指定了数据存储位置,`clientPort`是客户端连接的端口,`server.x`行定义了集群中的其他节点。 8. **启动和验证**:启动所有Zookeeper节点,确保它们能够正常通信并形成集群。然后...

    Kafka简介及使用PHP处理Kafka消息

    1. 安装 zookeeper c client 2. 编译 php libzookper 扩展 3. 编译 php zookeeper 扩展 4. 修改 php.ini 配置,添加 libzookeeper 和 php-zookeeper 扩展 使用 PHP 生产、消费 Kafka 消息的例子: 1. 启动 ...

    elk+filebeat+kafka日志系统搭建.docx

    在3.7.1版本中,Zookeeper的配置文件`zoo.cfg`需要设置`dataDir`和`clientPort`等参数。Zookeeper还需要一个管理端口,这里是2180。 **安装步骤**: 1. 解压缩所有软件包到适当位置。 2. 配置Zookeeper的`zoo.cfg`...

Global site tag (gtag.js) - Google Analytics