共计 2385 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper 的架构通过冗余服务实现高可用性。 |
本教程使用的 IDE 为 IntelliJ IDEA,创建一个 maven 工程,命名为 zookeeper-demo,并且引入如下依赖,可以自行在 maven 中央仓库选择合适的版本,介绍原生 API 和 Curator 两种方式。
IntelliJ IDEA 相关介绍:
- Intellij IDEA 使用教程
- Maven IntelliJ
<dependency> | |
<groupId>junit</groupId> | |
<artifactId>junit</artifactId> | |
<version>4.11</version> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.apache.zookeeper</groupId> | |
<artifactId>zookeeper</artifactId> | |
<version>3.4.8</version> | |
</dependency> | |
<dependency> | |
<groupId>org.apache.curator</groupId> | |
<artifactId>curator-framework</artifactId> | |
<version>4.0.0</version> | |
</dependency> | |
<dependency> | |
<groupId>org.apache.curator</groupId> | |
<artifactId>curator-recipes</artifactId> | |
<version>4.0.0</version> | |
</dependency> |
maven 工程目录结构:
一、客户端的 zookeeper 原生 API
使用 zookeeper 原生 API, 连接上一教程搭建的三台服务组成的集群,因为连接需要时间,用 countDownLatch 阻塞,等待连接成功,控制台输出连接状态!
实例
...public static void main(String[] args) { | |
try {final CountDownLatch countDownLatch=new CountDownLatch(1); | |
ZooKeeper zooKeeper= | |
new ZooKeeper("192.168.3.33:2181," + | |
"192.168.3.35:2181,192.168.3.37:2181", | |
4000, new Watcher() { | |
@Override | |
public void process(WatchedEvent event) {if(Event.KeeperState.SyncConnected==event.getState()){ | |
// 如果收到了服务端的响应事件,连接成功 | |
countDownLatch.countDown();} | |
} | |
}); | |
countDownLatch.await(); | |
//CONNECTED | |
System.out.println(zooKeeper.getState()); | |
} | |
} | |
... |
控制台输出 connected 显示连接成功!
简单示例添加节点 API:
zooKeeper.create("/runoob","0".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
提示:更多命令功能使用请参考本教程后面章节。
同时在服务端终端执行命令,显示设置成功。
二、客户端的 curator 连接
Curator 是 Netflix 公司开源的一套 zookeeper 客户端框架,解决了很多 Zookeeper 客户端非常底层的细节开发工作,包括连接重连、反复注册 Watcher 和 NodeExistsException 异常等。
Curator 包含了几个包:
- curator-framework:对 zookeeper 的底层 api 的一些封装。
- curator-client:提供一些客户端的操作,例如重试策略等。
- curator-recipes:封装了一些高级特性,如:Cache 事件监听、选举、分布式锁、分布式计数器、分布式 Barrier 等。
简单使用示例:
实例
public class CuratorDemo {public static void main(String[] args) throws Exception { | |
CuratorFramework curatorFramework=CuratorFrameworkFactory. | |
builder().connectString("192.168.3.33:2181," + | |
"192.168.3.35:2181,192.168.3.37:2181"). | |
sessionTimeoutMs(4000).retryPolicy(new | |
ExponentialBackoffRetry(1000,3)). | |
namespace("").build(); | |
curatorFramework.start(); | |
Stat stat=new Stat(); | |
// 查询节点数据 | |
byte[] bytes = curatorFramework.getData().storingStatIn(stat).forPath("/runoob"); | |
System.out.println(new String(bytes)); | |
curatorFramework.close();} | |
} |
上一步设置了 /runoob 节点值,所以控制台输出。
curator 相关参考链接: http://curator.apache.org/。
demo 源码打包文件:
Download
正文完
星哥玩云-微信公众号
