`

Zookeeper开源客户端框架Curator的简单使用

阅读更多

    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

分享到:
评论

相关推荐

    Zookeeper开源客户端框架Curator简介与示例

    Curator 是一个基于 ZooKeeper 的开源客户端框架,它为 ZooKeeper 提供了高级抽象和功能,使得开发人员能够更方便地使用 ZooKeeper。 **Curator 框架概述** Curator 包含多个模块,如 ZooKeeper 客户端连接管理、...

    浅谈Zookeeper开源客户端框架Curator

    浅谈Zookeeper开源客户端框架Curator Curator是一个基于Zookeeper的开源客户端框架,由Netflix开发,旨在解决Zookeeper客户端使用过程中的各种问题。Curator提供了封装ZooKeeper client与ZooKeeper server之间的...

    zookeeper开源客户端Curator

    Curator是Netflix公司开源的一套ZooKeeper客户端框架,Curator解决了很多ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等,实现了Fluent风格的API接口,目前已经...

    项目加入zookeeper的依赖包(Curator框架)

    而Curator是Facebook开源的一个基于Zookeeper的客户端框架,它对Zookeeper的API进行了封装,提供了更高级别的抽象,使得开发者能够更方便地与Zookeeper进行交互。 标题提到的“项目加入Zookeeper的依赖包(Curator...

    curator zookeeper 3.4.6 2.9.1

    而Curator则是Zookeeper的一个客户端库,为开发者提供了更高级别的抽象和工具,简化了Zookeeper的使用。 Zookeeper 3.4.6是其稳定且广泛采用的一个版本,它提供了丰富的API和强大的一致性模型。在这个版本中,...

    深入探索Zookeeper:从客户端使用到集群特性的全面指南

    本文将详细阐述Zookeeper的核心功能、客户端应用以及集群管理,特别关注如何使用官方Java客户端和Apache Curator框架。 首先,要使用Zookeeper的Java客户端,我们需要在项目中添加相应的依赖。如文中所示,可以引入...

    VIP-02 Zookeeper客户端使用与集群特性(1)

    Curator是Netflix公司开源的一个针对ZooKeeper的高级Java客户端框架。它不仅简化了ZooKeeper的使用,还提供了丰富的抽象和工具类,使得开发者能够更加专注于业务逻辑而不用过多关注ZooKeeper的具体实现细节。Curator...

    zookeeper实战

    Curator是Netflix开源的ZooKeeper客户端框架,它提供了一套高级API来简化ZooKeeper客户端的使用。Curator封装了许多常见的操作,使得开发者可以更加方便地利用ZooKeeper的特性,无需深入底层细节。Curator的常用API...

    zookeeper中文文档

    开源客户端框架Curator为使用Zookeeper提供了更方便的编程接口。 Zookeeper在实际的应用场景中可以用于实现统一命名服务、配置管理、集群管理、共享锁、队列管理、障碍墙、互斥锁、读写锁等多种功能,这些都是...

    curator-client

    Apache Curator是Facebook开源的Zookeeper客户端,其设计目标是提供一个更加易用、功能强大且稳定的Zookeeper客户端框架。它不仅包含了基本的Zookeeper操作,还提供了一套完整的解决方案,包括分布式锁、分布式...

    zookeeper学习文档

    开源客户端框架Curator作为Zookeeper的高级封装,简化了Zookeeper客户端的编程模型,被广泛用于生产环境中。 Zookeeper的应用场景非常广泛,包括但不限于统一命名服务(NameService)、配置管理(Configuration ...

    springboot整合Zookeeper组件,管理架构中服务协调

    Curator是Apache开源的一个Zookeeper客户端连接和操作的组件,Curator框架在Zookeeper原生API接口上进行二次包装。提供ZooKeeper各种应用场景:比如:分布式锁服务、集群领导选举、共享计数器、缓存机制、分布式队列...

    一文彻底理解ZooKeeper分布式锁的实现原理

    在本篇文章中,我们将深入探讨如何利用Curator这个流行的开源框架,实现基于ZooKeeper的分布式锁。 一、ZooKeeper分布式锁概述 分布式锁是解决分布式环境下资源同步问题的关键工具。在多客户端环境中,为了保证...

    zookeeper实践操作下载指南 1

    Curator是Facebook开源的一个Zookeeper客户端库,它提供了更高级别的抽象和实用工具,简化了Zookeeper的使用。例如,Curator提供了分布式锁、领导选举、配置管理等功能,使得开发人员能够更方便地构建可靠的分布式...

    基于zookeeper的分布式锁实现demo

    在示例代码中,我们看到使用了Curator框架,它是一个开源的Zookeeper客户端库,封装了Zookeeper的复杂操作,简化了Zookeeper编程。Curator提供了现成的分布式锁实现,如`InterProcessMutex`和`...

    Zookeeper 分布式过程.pdf

    本书的第二部分还介绍了C语言客户端的使用以及Curator框架,它是对ZooKeeper API的一个高级封装库,简化了客户端的开发工作。 在第三部分中,“第9章ZooKeeper内部原理”和“第10章运行ZooKeeper”深入探讨了...

    zookeeper依赖的jar包

    5. ** curator-recipes**:Curator是Facebook开源的一套Zookeeper客户端工具集,包含了多种高级的Zookeeper使用模式,如Leader选举、分布式锁等。对应的jar包有`curator-recipe-x.x.x.jar`。 6. ** Zookeeper服务器...

    当当网开源的分布式作业调度组件 Elastic-Job.zip

    该项目基于成熟的开源产品Quartz和Zookeeper及其客户端Curator进行二次开发。 ddframe其他模块也有可独立开源的部分,之前当当曾开源过dd-soa的基石模块DubboX。elastic-job和ddframe关系见下图Elastic-Job 主要...

    Zookeeper概述、原理及应用汇总

    为了方便开发者使用Zookeeper,社区提供了多种开源客户端库,其中最著名的是Curator和ZkClient。Curator由于其强大的功能和广泛的社区支持而成为全球应用最广泛的Zookeeper客户端库。 ### Zookeeper的应用场景 1. ...

Global site tag (gtag.js) - Google Analytics