南瓜慢说官方网站

  • 首页
  • 文章汇总
  • 容器技术
  • SpringBoot-Cloud
  • 程序人生
  • 其它
  • 整理
  • 关于

  • 搜索
中间件 config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac 计划 Stream MongoDB Spring DevOps JVM String Map Set List 性能 Email Springboot 集合类 ArrayList Java
技术之前,先读诗书:

Java连接Zookeeper

发表于 2020-08-31 | 分类于 其它 | 0 | 阅读次数 267

1 前言

之前介绍了如何安装Zookeeper,可参考如何安装Zookeeper的单机模式及集群模式,官方提供了客户端工具zkCli来连接服务端。本文介绍如何通过Java程序进行连接。

2 代码

2.1 Zookeeper代码管理类

建立连接的类,主要用于创建客户端与服务端的连接:

package com.pkslow.zk;

import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

import java.io.IOException;
import java.util.concurrent.CountDownLatch;

public class ZookeeperConnection {
    private ZooKeeper zooKeeper;
    CountDownLatch connectionLatch = new CountDownLatch(1);
  
    public ZooKeeper connect(String host) throws IOException, InterruptedException {
        zooKeeper = new ZooKeeper(host, 3000, watchedEvent -> {
            if (watchedEvent.getState() == Watcher.Event.KeeperState.SyncConnected) {
                connectionLatch.countDown();
            }
        });
        connectionLatch.await();
        return zooKeeper;
    }

    public void close() throws InterruptedException {
        zooKeeper.close();
    }
}

Zookeeper管理类:

package com.pkslow.zk;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class ZookeeperManager {
    private String connectString;
    private ZooKeeper zooKeeper;
    private ZookeeperConnection zookeeperConnection;

    public ZookeeperManager(String connectString) throws IOException, InterruptedException {
        this.connectString = connectString;
        initialize();
    }

    private void initialize() throws IOException, InterruptedException {
        zookeeperConnection = new ZookeeperConnection();
        zooKeeper = zookeeperConnection.connect(connectString);
    }

    public void closeConnection() throws InterruptedException {
        zookeeperConnection.close();
    }

    public void create(String path, byte[] data)
            throws KeeperException,
            InterruptedException {
        zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }

    public Object getZNodeData(String path, boolean watchFlag) throws KeeperException, InterruptedException {

        byte[] b;
        b = zooKeeper.getData(path, watchFlag, null);
        return new String(b, StandardCharsets.UTF_8);
    }

    public void update(String path, byte[] data) throws KeeperException, InterruptedException {
        int version = zooKeeper.exists(path, true).getVersion();
        zooKeeper.setData(path, data, version);
    }

    public void delete(String path) throws KeeperException, InterruptedException {
        int version = zooKeeper.exists(path, true).getVersion();
        zooKeeper.delete(path, version);
    }
}

2.2 示例测试类

注意这里的连接串为localhost:2181,localhost:2182,localhost:2183,连接的是集群,只要任意一个连接有效就可以。

package com.pkslow.zk;

public class ZookeeperSample {
    public static void main(String[] args) throws Exception {
        ZookeeperManager manager = new ZookeeperManager("localhost:2181,localhost:2182,localhost:2183");

        final String path = "/pkslow/website";

        System.out.println("delete for path: " + path);
        manager.delete(path);

        System.out.println("create the path: " + path);
        manager.create(path, "www.pkslow.com".getBytes());
        String data = (String) manager.getZNodeData(path, true);
        System.out.println("data from zookeeper: " + data);

        System.out.println("update for path: " + path);
        manager.update(path, "https://www.pkslow.com".getBytes());
        data = (String) manager.getZNodeData(path, true);
        System.out.println("data from zookeeper: " + data);

        manager.closeConnection();
    }
}

执行后输出日志为:

delete for path: /pkslow/website
create the path: /pkslow/website
data from zookeeper: www.pkslow.com
update for path: /pkslow/website
data from zookeeper: https://www.pkslow.com

3 总结

本文就是贴个Java连接Zookeeper的代码,实际生产很少直接这样用。很多情况是中间件使用Zookeeper做集群管理,如kafka。


欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

file

推荐阅读:
如何制定切实可行的计划并好好执行
容器技术(Docker-Kubernetes)
SpringBoot-Cloud相关
Https专题

  • 本文作者: 南瓜慢说
  • 本文链接: https://www.pkslow.com/archives/java-zookeeper
  • 版权声明: 本博客所有文章除特别声明外,不可转载!
# 中间件 # config # Go # Private # Kubernetes # pkslow # Test # HTTPS # Redis # Docker # Mac # 计划 # Stream # MongoDB # Spring # DevOps # JVM # String # Map # Set # List # 性能 # Email # Springboot # 集合类 # ArrayList # Java
中间件 config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac 计划 Stream MongoDB Spring DevOps JVM String Map Set List 性能 Email Springboot 集合类 ArrayList Java
如何安装Zookeeper的单机模式及集群模式
在Jenkins pipeline中无法执行npm,报错Cannot run program npm
  • 文章目录
  • 站点概览
南瓜慢说

南瓜慢说

多年Java开发,主要专注后端技术:Java/Spring/Springboot/微服务/大数据等。

多读书,多分享;多写作,多整理。

160 日志
7 分类
27 标签
RSS
0%
© 2020 — 2021 南瓜慢说 本站已挣扎运行:   粤ICP备20036375号