- /**
- * 这是一简单的接口类
- * @author tianji
- *
- */
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;
}
- /**
- * 这是接口的实现类
- * @author tianji
- *
- */
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());
}
}
}
相关推荐
Znode是Zookeeper中的数据存储单元,类似于文件系统中的文件或目录。每个Znode都有一个唯一的路径标识,并且可以包含数据和子节点。Znode分为临时节点和持久节点,临时节点在创建它的客户端断开连接后会自动删除,而...
在Zookeeper中,数据存储是以节点(ZNode)的形式存在,每个节点都可以包含数据以及子节点。 标题"zookeeper删除数据节点.rar_hello7gq_somethingjtt_spiderlxd_zk删除节点_zooke"提及的关键点是关于Zookeeper中...
ZooKeeper碰到的问题
2. **创建数据存储目录**: ```bash mkdir data mkdir dataLog ``` 创建 `data` 和 `dataLog` 文件夹用于存储数据。 3. **配置 zoo.cfg 文件**: - 将 `zoo_sample.cfg` 复制并重命名为 `zoo.cfg`。 - 编辑 ...
一款好用的zookeeper配置内容导入导出工具,适用平台是windows,但是也可以修改run.bat为shell脚本,适合linux。 带图形界面,修改config中的config.xml,添加需要管理的zookeeper地址信息,同时可以定义两个用户...
ZooKeeper的主要设计目标是简化分布式系统的复杂性,它通过提供一种共享的、有序的、版本化的数据存储来实现这一点。ZooKeeper节点(称为znode)可以存储小量的数据,并且支持读写操作,同时提供了观察机制,使得...
Zookeeper的数据模型是层次化的命名空间,类似于文件系统,每个节点(称为Znode)都可以存储数据。当一个Znode的数据发生变化时,Zookeeper会通过Watch机制通知已订阅该节点的客户端,实现了数据的实时同步。在这个...
1. 数据节点(ZNode):Zookeeper的数据存储是以节点(ZNode)的形式进行的,每个节点都可以包含数据和子节点。ZNode分为临时节点和永久节点,临时节点在创建它的客户端会话结束时自动删除,而永久节点则不会。 2. ...
1. **节点(ZNode)**:ZooKeeper 的数据存储结构类似文件系统,由一系列的节点构成,每个节点称为ZNode。每个ZNode都可以存储数据,有唯一的路径标识,并可以设置权限和监控事件。 2. **会话(Session)**:客户端...
1. 数据模型:Hbase采用行键(Row Key)、列族(Column Family)、列(Qualifier)、时间戳四元组来组织数据,这种模式适合稀疏、多维度的数据存储。 2. 数据分布:Hbase的数据分布在HDFS上,通过行键进行分区,...
* `dataDir`:Zookeeper 的数据目录,用于存储 Zookeeper 的数据。 * `server.A=B:C:D`:配置服务器列表,A 是服务器的编号,B 是服务器的地址,C 是服务器的 Follower 端口,D 是服务器的 Leader 选举端口。 例如...
1. **节点(Znode)**: Zookeeper的数据存储是以节点的形式进行,每个节点都可以有子节点,并且可以存储数据。节点分为临时节点和持久节点,临时节点在网络断开时会被删除,而持久节点则不会。 2. **Watcher**: ...
1. **节点(Znode)**:Zookeeper的数据存储结构类似于文件系统的层次结构,由一系列节点组成,每个节点称为Znode。Znode可以存储数据,并拥有唯一的路径标识,如`/app/service`。 2. **会话(Session)**:客户端...
- **节点(Znode)**:Zookeeper 的数据存储是以节点的形式进行的,每个节点都可以包含数据和子节点,类似于文件系统的目录结构。节点分为持久节点和临时节点,持久节点在创建后不会因为客户端会话结束而自动删除,...
2. 节点(Znode):Zookeeper的数据存储结构类似文件系统,由一系列节点组成。每个节点称为Znode,包含数据和元数据,如创建时间、最后修改时间、版本号等。Znode分为持久节点和临时节点,前者在创建后不会因客户端...
ZooKeeper设计的初衷是为分布式应用提供一种高可用性的配置管理服务,解决了分布式系统中数据存储、同步、命名和协调问题,特别适合于处理分布式环境中数据的一致性问题。 ZooKeeper的核心特点包括了简单、可依赖和...
ZooKeeper的配置部分(系列之四)通常涉及设置服务器角色、指定数据存储位置、设置客户端连接参数等。这些配置有助于调整ZooKeeper的行为以适应不同的应用场景。 系列之五和六可能涉及ZooKeeper的运行机制和四字...
三、Zookeeper数据模型 Zookeeper的数据模型类似于文件系统,由节点(ZNode)构成,每个节点都可以存储数据,并具有版本号、ACL(访问控制列表)和时间戳等属性。节点分为临时节点(会话结束自动删除)和持久节点...
ZooKeeper是一个分布式应用程序协调服务,提供了一个树形命名空间,用于存储和管理数据。 ZooKeeper主要用于分布式应用程序的配置管理、名称服务、分布式同步和提供组服务等。 ZooKeeper命令 * 启动ZooKeeper命令...