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

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 的数据存储机制是什么.md

    ZooKeeper碰到的问题

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

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

    zookeeper配置内容导入导出工具

    一款好用的zookeeper配置内容导入导出工具,适用平台是windows,但是也可以修改run.bat为shell脚本,适合linux。 带图形界面,修改config中的config.xml,添加需要管理的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)**:客户端...

    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 3.8.4

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

    Zookeeper-基础

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

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

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

    zookeeper 系列整理总结

    ZooKeeper的配置部分(系列之四)通常涉及设置服务器角色、指定数据存储位置、设置客户端连接参数等。这些配置有助于调整ZooKeeper的行为以适应不同的应用场景。 系列之五和六可能涉及ZooKeeper的运行机制和四字...

    zookeeper-3.4.12版本

    三、Zookeeper数据模型 Zookeeper的数据模型类似于文件系统,由节点(ZNode)构成,每个节点都可以存储数据,并具有版本号、ACL(访问控制列表)和时间戳等属性。节点分为临时节点(会话结束自动删除)和持久节点...

    zookeeper笔记.pdf

    ZooKeeper是一个分布式应用程序协调服务,提供了一个树形命名空间,用于存储和管理数据。 ZooKeeper主要用于分布式应用程序的配置管理、名称服务、分布式同步和提供组服务等。 ZooKeeper命令 * 启动ZooKeeper命令...

Global site tag (gtag.js) - Google Analytics