Curator对ZK的一些应用场景提供了非常好的实现,而且有很多扩充,这些都符合ZK使用规范
它的主要组件为:
- Recipes, ZooKeeper的系列recipe实现, 基于 Curator Framework.
- Framework, 封装了大量ZooKeeper常用API操作,降低了使用难度, 基于Zookeeper增加了一些新特性,对ZooKeeper链接的管理,对链接丢失自动重新链接。
- Utilities,一些ZooKeeper操作的工具类包括ZK的集群测试工具路径生成等非常有用,在Curator-Client包下org.apache.curator.utils。
- Client,ZooKeeper的客户端API封装,替代官方 ZooKeeper class,解决了一些繁琐低级的处理,提供一些工具类。
- Errors,异常处理, 连接异常等
- Extensions,对curator-recipes的扩展实现,拆分为 curator-:stuck_out_tongue_closed_eyes:iscovery和 curator-:stuck_out_tongue_closed_eyes:iscovery-server提供基于RESTful的Recipes WEB服务.
下载jar包
// https://mvnrepository.com/artifact/org.apache.curator/curator-framework
compile group: 'org.apache.curator', name: 'curator-framework', version: '2.11.1'
compile group: 'org.apache.curator', name: 'curator-client', version: '2.11.1'
compile group: 'org.apache.curator', name: 'curator-recipes', version: '2.11.1'
compile group: 'org.apache.curator', name: 'curator-test', version: '2.11.1'
代码:
package org.gjp;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.leader.LeaderLatch;
import org.apache.curator.framework.recipes.leader.LeaderLatch.CloseMode;
import org.apache.curator.framework.recipes.leader.LeaderLatchListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.test.TestingServer;
import org.apache.curator.utils.CloseableUtils;
public class LeaderDemo3 {
public static void main(String[]args) throws Exception{
final List<LeaderLatch> leaders=new ArrayList<LeaderLatch>();
final List<CuratorFramework> clients=new ArrayList<CuratorFramework>();
final TestingServer server=new TestingServer();
try{
for(int i=0;i<10;i++){
//建立模拟客户端
CuratorFramework client=CuratorFrameworkFactory.newClient("127.0.0.1:2181",
new ExponentialBackoffRetry(20000,3));
clients.add(client);
//Leader选举 注意每个客户端的路径都要相同才会在同一个组中
final LeaderLatch leader=new LeaderLatch(client,"/zkpath2","clent"+i);
leader.addListener(new LeaderLatchListener(){
//获取leader权限时执行
public void isLeader() {
System.out.println(leader.getId()+" ;I am Leader");
//拥有leader权限的长度
try {
final int waitSeconds = (int)(5 * Math.random()) + 1;
Thread.sleep(TimeUnit.SECONDS.toMillis(waitSeconds));
} catch (InterruptedException e1) {
e1.printStackTrace();
}
//模拟让出leader 权限
if(leader !=null){
try {
//关闭是通知所有客户端
leader.close(CloseMode.NOTIFY_LEADER);
} catch (IOException e) {
e.printStackTrace();
}
}
}
//是否leader权限时执行
public void notLeader() {
System.out.println(leader.getId()+" I am not Leader");
}});
leaders.add(leader);
//客户端启动
client.start();
try {
//必须启动LeaderLatch: leaderLatch.start(); 一旦启动, LeaderLatch会和其它使用相同latch path的其它LeaderLatch交涉,然后随机的选择其中一个作为leader
leader.start();
} catch (Exception e) {
e.printStackTrace();
}
}
Thread.sleep(Integer.MAX_VALUE);
}finally{
for(CuratorFramework client:clients){
CloseableUtils.closeQuietly(client);
}
for(LeaderLatch leader:leaders){
CloseableUtils.closeQuietly(leader);
}
CloseableUtils.closeQuietly(server);
}
Thread.sleep(Integer.MAX_VALUE);
}
}
运行结果:
相关推荐
标题提到的“项目加入Zookeeper的依赖包(Curator框架)”意味着我们要在Java项目中引入这两个关键组件:Zookeeper和Curator。在Java项目中,我们通常通过Maven或Gradle来管理依赖。对于Zookeeper和Curator,我们需要...
2. **分布式锁**:在多节点环境中,同步访问共享资源是常见的需求。Curator的分布式锁食谱可以防止多个节点同时修改同一数据,确保数据的一致性。 3. **分组服务**:通过Group服务,节点可以加入到特定的组中,实现...
在传统的单机系统中,我们可以使用synchronized关键字或ReentrantLock等来实现线程同步,但在分布式环境中,我们需要一种跨机器的锁机制,这就是ZooKeeper和Curator实现的分布式锁。 ZooKeeper的分布式锁工作原理...
首先,我们需要在 `pom.xml` 文件中添加 Curator 的依赖。接着,在 `src` 目录下编写 Java 代码: ```java import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework....
Curator是一个基于Zookeeper的开源客户端框架,由Netflix开发,旨在解决Zookeeper客户端使用过程中的各种问题。Curator提供了封装ZooKeeper client与ZooKeeper server之间的连接处理、提供了一套Fluent风格的操作API...
Curator提供了一个名为`Configurator`的工具,使得应用程序可以轻松地在ZooKeeper中存储和获取配置信息,从而实现动态配置。 10. **测试支持**: Curator还提供了测试工具,如`TestingServer`,用于单元测试和...
Curator支持原子性的多操作事务,可以在一次会话中执行一系列操作,确保它们要么全部成功,要么全部失败。 8. **异步操作**: Curator提供了异步操作接口,允许开发者在不阻塞主线程的情况下进行ZooKeeper操作。 ...
Curator 提供了丰富的 API 和策略,使得开发者能够更方便地在应用程序中集成 ZooKeeper。 在 "apache-curator.rar" 压缩包中,我们可以预期找到 Apache Curator 的相关资料,包括库的源代码、文档、示例和可能的...
1. guava-18.0.jar:这是Google的Guava库,提供了一组通用的Java集合框架、多线程支持、I/O工具等,对于Curator的某些功能实现至关重要,比如缓存管理和延迟任务。 2. mockito-all-1.9.0.jar:Mockito是一个单元...
5. **缓存**:Curator有内置的数据缓存机制,可以在本地缓存Zookeeper中的数据,提高读取速度并减少网络通信。 四、版本选择与升级 选择Curator客户端版本时,应考虑兼容性和功能需求。对于新的项目,建议使用最新...
2. **基本概念**:Curator 包含了多个框架,如 CuratorFramework、ZkClient、 recipes 等,它们提供了不同的功能。CuratorFramework 是 Curator 的核心,它封装了 ZooKeeper 连接的创建、会话管理以及操作执行等。 ...
在Java开发中,Apache Curator 是一个非常重要的工具库,它为使用Zookeeper提供了一套高级API,简化了Zookeeper的使用。标题“curator_zookeeper需要的jar”表明我们正在讨论Curator与Zookeeper集成时所需的JAR文件...
4. **Transaction Support**:Curator 支持 ZooKeeper 的事务操作,允许在一个原子操作中执行多个更新。 5. **Service Discovery**:Curator 提供了服务发现机制,使得应用能够发现和注册服务,有助于构建松耦合的...
赠送jar包:curator-client-2.7.1.jar; 赠送原API文档:curator-client-2.7.1-javadoc.jar; 赠送源代码:curator-client-2.7.1-sources.jar; 赠送Maven依赖信息文件:curator-client-2.7.1.pom; 包含翻译后的API...
在Curator Framework基础上封装的curator-recipes,实现了很多经典场景。比如:集群管理(Leader选举)、共享锁、队列、Counter等等。可以总结Curator主要解决以下三类问题: 封装ZK Client与Server之间的连接处理...
本示例将详细介绍如何利用 Curator 在 ZooKeeper 上进行数据操作以及实现分布式锁。 一、ZooKeeper 与 Curator 的基本概念 1. ZooKeeper:ZooKeeper 是一款分布式协调服务,它为分布式应用提供一致性服务,如命名...
它采用的是主从复制的架构,数据存储在内存中,确保高可用性和一致性。 2. **Curator Framework概述** Curator Framework是Zookeeper的Java客户端,由Netflix开发并贡献给Apache。它提供了更高级别的抽象,简化了...
Curator是Netflix公司开源的一套ZooKeeper客户端框架,Curator解决了很多ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等,实现了Fluent风格的API接口,目前已经...
Curator的`ServiceCache`提供了更加高效的服务查询方式,它会在内存中缓存服务实例,减少对Zookeeper的频繁查询,同时使用Watcher机制实时更新服务列表。 总的来说,Zookeeper结合Curator的`ServiceDiscovery`机制...
赠送jar包:curator-framework-2.6.0.jar; 赠送原API文档:curator-framework-2.6.0-javadoc.jar; 赠送源代码:curator-framework-2.6.0-sources.jar; 赠送Maven依赖信息文件:curator-framework-2.6.0.pom; ...