Curator最初由Netflix的Jordan Zimmerman开发, Curator提供了一套Java类库, 可以更容易的使用ZooKeeper.
所谓ZooKeeper技巧(ZooKeeper Recipes),也可以称之为解决方案, 或者叫实现方案, 是指ZooKeeper的使用方法, 比如分布式的配置管理, Leader选举等
Curator作为Apache ZooKeeper天生配套的组件。ZooKeeper的Java开发者自然而然的会选择它在项目中使用。
官网链接:http://curator.apache.org/
提供的功能组件
1.Framework 提供了一套高级的API, 简化了ZooKeeper的操作。 它增加了很多使用ZooKeeper开发的特性,可以处理ZooKeeper集群复杂的连接管理和重试机制
2.Client 是ZooKeeper客户端的一个替代品, 提供了一些底层处理和相关的工具方法
3.Recipes 实现了通用ZooKeeper的recipe, 该组件建立在Framework的基础之上
4.Utilities 各种工具类
5.Errors 异常处理, 连接, 恢复等.
6.Extensions curator-recipes包实现了通用的技巧,这些技巧在ZooKeeper文档中有介绍。为了避免是这个包(package)变得巨大, recipes/applications将会放入一个独立的extension包下。并使用命名规则curator-x-name.
Curator 编译好的类库被发布到Maven Center中。Curator包含几个artifact. 你可以根据你的需要在你的项目中加入相应的依赖。对于大多数开发者来说,引入curator-recipes这一个就足够了.
依赖:
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-client</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.6.0</version> </dependency>
接下来是我实战中用到一些代码,(需要说明的是这里用到了zookeeper共享锁,按天执行的锁,并不是很完善,通过节点路径来控制)
示例代码:
@Component("userTask") public class UserTask extends BaseTask { private static Logger logger = LoggerFactory.getLogger(UserTask .class); @Autowired private UserService userService; @Resource protected ZooKeeperClient zkClient; public static String LOCK_NODE = "/data/lockPs" + new DateTime().toString("yyyy-MM-dd"); @Override public void doTask() { InterProcessMutex lock = new InterProcessMutex(zkClient.getClient(), "/data/lock"); try { if (lock.acquire(2000, TimeUnit.MILLISECONDS)) { List<String> list = zkClient.getChildren(LOCK_NODE); if (list.size() == 0) { zkClient.create(LOCK_NODE, CreateMode.PERSISTENT); //lock.acquire(); logger.info("开始执行任务:" + new DateTime().toString("yyyy-MM-dd HH:mm:ss")); try { userService.execute(); } catch (Exception e) { logger.error("执行任务中抛错",e); } finally { logger.info("结束执行任务:" + new DateTime().toString("yyyy-MM-dd HH:mm:ss")); } } lock.release(); } } catch (Exception e) { logger.error("zkclient/执行任务抛错:",e); } } }
另外需要说明是用到了封装好的zookeeper的客户端,这里在介绍一下,
获取zookeeper的客户端:
//1.方式一 class ZooKeeperClient{ private CuratorFramework client; public ZooKeeperClient(String zkAddress) { client = CuratorFrameworkFactory.newClient(zkAddress, new ExponentialBackoffRetry(1000, 3)); client.getCuratorListenable().addListener(new NodeEventListener()); client.start(); } ... } //2.方式二 class ZooKeeperClient{ private CuratorFramework client; public ZooKeeperClient(String connectString, int sessionTimeout, String parent) throws Exception { zkClient = new CuratorZookeeperClient(connectString, sessionTimeout, sessionTimeout, zNodeWatcher, new ExponentialBackoffRetry(1000, Integer.MAX_VALUE)); zkClient.start();//must,but anytime before zookeeper operation zkClient.blockUntilConnectedOrTimedOut(); //first connection should be successful } ... }
推荐看:
https://yq.aliyun.com/articles/43537
http://shift-alt-ctrl.iteye.com/blog/1981751
相关推荐
Curator 是一个基于 ZooKeeper 的开源客户端框架,它为 ZooKeeper 提供了高级抽象和功能,使得开发人员能够更方便地使用 ZooKeeper。 **Curator 框架概述** Curator 包含多个模块,如 ZooKeeper 客户端连接管理、...
浅谈Zookeeper开源客户端框架Curator Curator是一个基于Zookeeper的开源客户端框架,由Netflix开发,旨在解决Zookeeper客户端使用过程中的各种问题。Curator提供了封装ZooKeeper client与ZooKeeper server之间的...
Curator是Netflix公司开源的一套ZooKeeper客户端框架,Curator解决了很多ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等,实现了Fluent风格的API接口,目前已经...
而Curator是Facebook开源的一个基于Zookeeper的客户端框架,它对Zookeeper的API进行了封装,提供了更高级别的抽象,使得开发者能够更方便地与Zookeeper进行交互。 标题提到的“项目加入Zookeeper的依赖包(Curator...
而Curator则是Zookeeper的一个客户端库,为开发者提供了更高级别的抽象和工具,简化了Zookeeper的使用。 Zookeeper 3.4.6是其稳定且广泛采用的一个版本,它提供了丰富的API和强大的一致性模型。在这个版本中,...
本文将详细阐述Zookeeper的核心功能、客户端应用以及集群管理,特别关注如何使用官方Java客户端和Apache Curator框架。 首先,要使用Zookeeper的Java客户端,我们需要在项目中添加相应的依赖。如文中所示,可以引入...
Curator是Netflix公司开源的一个针对ZooKeeper的高级Java客户端框架。它不仅简化了ZooKeeper的使用,还提供了丰富的抽象和工具类,使得开发者能够更加专注于业务逻辑而不用过多关注ZooKeeper的具体实现细节。Curator...
Curator是Netflix开源的ZooKeeper客户端框架,它提供了一套高级API来简化ZooKeeper客户端的使用。Curator封装了许多常见的操作,使得开发者可以更加方便地利用ZooKeeper的特性,无需深入底层细节。Curator的常用API...
开源客户端框架Curator为使用Zookeeper提供了更方便的编程接口。 Zookeeper在实际的应用场景中可以用于实现统一命名服务、配置管理、集群管理、共享锁、队列管理、障碍墙、互斥锁、读写锁等多种功能,这些都是...
Apache Curator是Facebook开源的Zookeeper客户端,其设计目标是提供一个更加易用、功能强大且稳定的Zookeeper客户端框架。它不仅包含了基本的Zookeeper操作,还提供了一套完整的解决方案,包括分布式锁、分布式...
开源客户端框架Curator作为Zookeeper的高级封装,简化了Zookeeper客户端的编程模型,被广泛用于生产环境中。 Zookeeper的应用场景非常广泛,包括但不限于统一命名服务(NameService)、配置管理(Configuration ...
Curator是Apache开源的一个Zookeeper客户端连接和操作的组件,Curator框架在Zookeeper原生API接口上进行二次包装。提供ZooKeeper各种应用场景:比如:分布式锁服务、集群领导选举、共享计数器、缓存机制、分布式队列...
在本篇文章中,我们将深入探讨如何利用Curator这个流行的开源框架,实现基于ZooKeeper的分布式锁。 一、ZooKeeper分布式锁概述 分布式锁是解决分布式环境下资源同步问题的关键工具。在多客户端环境中,为了保证...
Curator是Facebook开源的一个Zookeeper客户端库,它提供了更高级别的抽象和实用工具,简化了Zookeeper的使用。例如,Curator提供了分布式锁、领导选举、配置管理等功能,使得开发人员能够更方便地构建可靠的分布式...
在示例代码中,我们看到使用了Curator框架,它是一个开源的Zookeeper客户端库,封装了Zookeeper的复杂操作,简化了Zookeeper编程。Curator提供了现成的分布式锁实现,如`InterProcessMutex`和`...
本书的第二部分还介绍了C语言客户端的使用以及Curator框架,它是对ZooKeeper API的一个高级封装库,简化了客户端的开发工作。 在第三部分中,“第9章ZooKeeper内部原理”和“第10章运行ZooKeeper”深入探讨了...
5. ** curator-recipes**:Curator是Facebook开源的一套Zookeeper客户端工具集,包含了多种高级的Zookeeper使用模式,如Leader选举、分布式锁等。对应的jar包有`curator-recipe-x.x.x.jar`。 6. ** Zookeeper服务器...
该项目基于成熟的开源产品Quartz和Zookeeper及其客户端Curator进行二次开发。 ddframe其他模块也有可独立开源的部分,之前当当曾开源过dd-soa的基石模块DubboX。elastic-job和ddframe关系见下图Elastic-Job 主要...
为了方便开发者使用Zookeeper,社区提供了多种开源客户端库,其中最著名的是Curator和ZkClient。Curator由于其强大的功能和广泛的社区支持而成为全球应用最广泛的Zookeeper客户端库。 ### Zookeeper的应用场景 1. ...