`
luhaichuan88
  • 浏览: 515 次
社区版块
存档分类
最新评论

Zookeeper作数据存储

阅读更多
  1. /** 
  2.  * 这是一简单的接口类
  3.  * @author tianji
  4.  * 
  5.  */

public interface ZookeeperService {

    void create(String path, byte[] data, boolean ephemeral);

    byte[] getData(String path);

    String getConfigData(String path);

    void setData(String path, byte[] data) throws Exception;

    void delete(String path);

    List<String> getChildren(String path);

    boolean checkExists(String path, String activityCategory, String pathType) throws Exception;

}

  1. /** 
  2.  * 这是接口的实现类
  3.  * @author tianji
  4.  * 
  5.  */

 

 

import org.apache.commons.lang.StringUtils;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.curator.framework.CuratorFramework;

import org.apache.curator.framework.CuratorFrameworkFactory;

import org.apache.curator.retry.ExponentialBackoffRetry;

import org.apache.zookeeper.CreateMode;

import org.springframework.context.annotation.Lazy;

import org.springframework.stereotype.Service;

 

public class ZookeeperServiceImpl implements ZookeeperService{

 

    private static final int CONNECTIONTIMEOUTMS = 15000;

    private static final int SESSIONTIMEOUTMS = 60000;

    privatefinal int BASESLEEPTIMEMS = 1000;

    private static final int MAXRETRIES = 3;

    private static final int MAXSLEEPMS = 5000;

    private CuratorFramework client;

 

    //在此笔者使用的是CuratorFramework,是一款ZooKeeper客户端工具,封装了大量的    zookeeper api

    //在创建这个类时就调用此构造方法连接zookeeper服务器

   //并设置相关的zookeeper参数

 

    public ZookeeperServiceImpl(){

        this.client = CuratorFrameworkFactory.builder()

                          .connectString(“192.168.1.111:2181”)

                          .connectionTimeoutMs(CONNECTIONTIMEOUTMS)

                         .sessionTimeoutMs(SESSIONTIMEOUTMS)

                         .retryPolicy(new ExponentialBackoffRetry(BASESLEEPTIMEMS, MAXRETRIES,                                                                                                             MAXSLEEPMS))

                         .build();

    }

 

 

   //在zookeeper服务器上创建节点

   //当 ephemeral 为 true 创建永久节点,为false时创建临时节点(当此连接断开时,即自动删除)

   @Override

    public void create(String path, byte[] data, boolean ephemeral) {

        if(data == null || data.length == 0) {

data = new byte[0];

}

        try {

if(client == null || ! client.getZookeeperClient().isConnected()){

client.start();

}

if(ephemeral) {

client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath(path, data);

} else {

client.create().creatingParentsIfNeeded().forPath(path, data);

}

} catch(Exception e) {

e.printStackTrace();

throw new IllegalStateException(e.getMessage());

}

    }

    //检查服务器上是否存在某个节点

    @Override

public boolean checkExists(String path, String activityCategory, String pathType) throws Exception {

if(client == null || ! client.getZookeeperClient().isConnected()){

client.start();

}

                if(client.checkExists().forPath(path) == null){

                                           this.client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath(path, new byte[0]);

                }

                if(client.checkExists().forPath(path) == null){

return false;

}else{

return true;

}

        }

 

       //获取某个节点的数据

       @Override

public byte[] getData(String path) {

if(client == null || ! client.getZookeeperClient().isConnected()){

client.start();

}

try {

if(client.checkExists().forPath(path) == null){

return new byte[0];

}else{

return client.getData().forPath(path);

}

} catch(Exception e) {

throw new IllegalStateException(e.getMessage());

}

}

 

       //设置某个节点的数据

       @Override

public void setData(String path, byte[] data) {

if(client == null || ! client.getZookeeperClient().isConnected()){

client.start();

}

try {

if(data == null || data.length == 0) {

data = new byte[0];

}

 

client.setData().forPath(path, data);

} catch(Exception e) {

e.printStackTrace();

throw new IllegalStateException(e.getMessage());

}

}

 

        //删除某个节点

         @Override

public void delete(String path) {

if(client == null || ! client.getZookeeperClient().isConnected()){

client.start();

}

try {

client.delete().forPath(path);

} catch(Exception e) {

throw new IllegalStateException(e.getMessage());

}

}

        //获取某个节点下的所有子节点

        @Override

public List<String> getChildren(String path) {

if(client == null || ! client.getZookeeperClient().isConnected()){

client.start();

}

try {

return client.getChildren().forPath(path);

} catch(Exception e) {

throw new IllegalStateException(e.getMessage());

}

}

 

}

分享到:
评论

相关推荐

    zookeeper节点数据的监听与读写操作

    Znode是Zookeeper中的数据存储单元,类似于文件系统中的文件或目录。每个Znode都有一个唯一的路径标识,并且可以包含数据和子节点。Znode分为临时节点和持久节点,临时节点在创建它的客户端断开连接后会自动删除,而...

    zookeeper删除数据节点.rar_hello7gq_somethingjtt_spiderlxd_zk删除节点_zooke

    在Zookeeper中,数据存储是以节点(ZNode)的形式存在,每个节点都可以包含数据以及子节点。 标题"zookeeper删除数据节点.rar_hello7gq_somethingjtt_spiderlxd_zk删除节点_zooke"提及的关键点是关于Zookeeper中...

    获取ZooKeeper节点数据内容的完整指南:深入探索ZNode数据检索

    ZooKeeper中的数据存储在称为ZNode的节点中,每个ZNode可以包含数据内容和子节点,同时,每个节点还有元数据如版本号和子节点数量。ZNode存储的数据量限制为最多1MB,数据内容可以是任意字节序列,通常用作存储配置...

    ZooKeeper 的数据存储机制是什么.md

    ZooKeeper碰到的问题

    zookeeper数据迁移从单例到集群linux命令过程

    2. **创建数据存储目录**: ```bash mkdir data mkdir dataLog ``` 创建 `data` 和 `dataLog` 文件夹用于存储数据。 3. **配置 zoo.cfg 文件**: - 将 `zoo_sample.cfg` 复制并重命名为 `zoo.cfg`。 - 编辑 ...

    分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    - **dataDir**:指定 Zookeeper 存储数据的目录,包括事务日志和快照。例如,`dataDir=D:/devtools/zookeeper-3.2.2/build`。 - **clientPort**:客户端与 Zookeeper 服务器交互的端口,默认为 2181。 - **启动与...

    zookeeper配置内容导入导出工具

    一款好用的zookeeper配置内容导入导出工具,适用平台是windows,但是也可以修改run.bat为shell脚本,适合linux。 带图形界面,修改config中的config.xml,添加需要管理的zookeeper地址信息,同时可以定义两个用户...

    ZooKeeper节点数据更新全攻略:变更ZNode数据内容的实践指南

    每个ZNode可以存储最多1MB的数据,并且可以进行更新,以反映分布式系统状态的变化。ZooKeeper在处理节点数据更新时,需要确保数据的一致性,因此在更新时通常会结合版本号来进行操作。 在ZooKeeper中,节点数据的...

    基于zookeeper动态扩展处理分类数据

    ZooKeeper的主要设计目标是简化分布式系统的复杂性,它通过提供一种共享的、有序的、版本化的数据存储来实现这一点。ZooKeeper节点(称为znode)可以存储小量的数据,并且支持读写操作,同时提供了观察机制,使得...

    zookeeperMaster选举以及数据同步代码

    Zookeeper的数据模型是层次化的命名空间,类似于文件系统,每个节点(称为Znode)都可以存储数据。当一个Znode的数据发生变化时,Zookeeper会通过Watch机制通知已订阅该节点的客户端,实现了数据的实时同步。在这个...

    zookeeper界面访问工具

    1. 数据节点(ZNode):Zookeeper的数据存储是以节点(ZNode)的形式进行的,每个节点都可以包含数据和子节点。ZNode分为临时节点和永久节点,临时节点在创建它的客户端会话结束时自动删除,而永久节点则不会。 2. ...

    zookeeper 3.6.3 源码下载

    1. **节点(ZNode)**:ZooKeeper 的数据存储结构类似文件系统,由一系列的节点构成,每个节点称为ZNode。每个ZNode都可以存储数据,有唯一的路径标识,并可以设置权限和监控事件。 2. **会话(Session)**:客户端...

    zookeeper 3.8.4

    - **节点(Znode)**:Zookeeper 的数据存储是以节点的形式进行的,每个节点都可以包含数据和子节点,类似于文件系统的目录结构。节点分为持久节点和临时节点,持久节点在创建后不会因为客户端会话结束而自动删除,...

    Hbase与zookeeper笔记备份.rar

    1. 数据模型:Hbase采用行键(Row Key)、列族(Column Family)、列(Qualifier)、时间戳四元组来组织数据,这种模式适合稀疏、多维度的数据存储。 2. 数据分布:Hbase的数据分布在HDFS上,通过行键进行分区,...

    zookeeper配置.docx

    * `dataDir`:Zookeeper 的数据目录,用于存储 Zookeeper 的数据。 * `server.A=B:C:D`:配置服务器列表,A 是服务器的编号,B 是服务器的地址,C 是服务器的 Follower 端口,D 是服务器的 Leader 选举端口。 例如...

    【Zookeeper管理工具】

    1. **节点(Znode)**: Zookeeper的数据存储是以节点的形式进行,每个节点都可以有子节点,并且可以存储数据。节点分为临时节点和持久节点,临时节点在网络断开时会被删除,而持久节点则不会。 2. **Watcher**: ...

    zookeeper-3.4.14.zip

    1. **节点(Znode)**:Zookeeper的数据存储结构类似于文件系统的层次结构,由一系列节点组成,每个节点称为Znode。Znode可以存储数据,并拥有唯一的路径标识,如`/app/service`。 2. **会话(Session)**:客户端...

    Zookeeper-基础

    2. 节点(Znode):Zookeeper的数据存储结构类似文件系统,由一系列节点组成。每个节点称为Znode,包含数据和元数据,如创建时间、最后修改时间、版本号等。Znode分为持久节点和临时节点,前者在创建后不会因客户端...

    zookeeper-3.6.3.zip

    1. **节点(ZNode)**:Zookeeper的数据存储结构类似文件系统,由一系列的节点构成,每个节点可以存储数据并拥有唯一的路径。 2. **原子操作**:所有对Zookeeper的操作都是原子性的,即一次操作要么全部成功,要么...

    基于ZooKeeper的配置信息存储方案的设计与实现

    ZooKeeper设计的初衷是为分布式应用提供一种高可用性的配置管理服务,解决了分布式系统中数据存储、同步、命名和协调问题,特别适合于处理分布式环境中数据的一致性问题。 ZooKeeper的核心特点包括了简单、可依赖和...

Global site tag (gtag.js) - Google Analytics