文档章节

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

乐在克里特
 乐在克里特
发布于 2017/02/23 09:50
字数 693
阅读 21
收藏 0

    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

© 著作权归作者所有

共有 人打赏支持
乐在克里特
粉丝 15
博文 268
码字总数 394729
作品 0
杭州
程序员
ZooKeeper学习笔记六 ZooKeeper开源客户端Curator

本文学习资源来自《从Paxos到ZooKeeper分布式一致性原理与实践》 Curator Curator是Netflix公司开源的一套ZooKeeper客户端框架,作者是Jordan Zimmerman。 和ZkClient一样,Curator解决了很多...

xundh
04/28
0
0
Apache Curator 2.7.1 发布

Apache Curator 2.7.1 发布了,zookeeper 的客户端调用过于复杂,Curator提供了对zookeeper客户端的封装,Apache Curator 就是为了简化zookeeper客户端调用而生,利用它,可以更好的使用zoo...

凯文加内特
2015/03/02
0
0
分布式利器Zookeeper(三)

前言 《分布式利器Zookeeper(一)》 《分布式利器Zookeeper(二):分布式锁》 本篇博客是分布式利器Zookeeper系列的最后一篇,涉及的话题是:Zookeeper分布式锁的代码实现、zkclient的使用、...

zfz_linux_boy
07/01
0
0
使用Apache Curator监控Zookeeper的Node和Path的状态

 1.Zookeeper经常被我们用来做配置管理,配置的管理在分布式应用环境中很常见,例如同一个应用系统需要多台 PC Server 运行,但是它们运行的应用系统的某些配置项是相同的,如果要修改这些相...

孟飞阳
07/06
0
0
Apache Curator操作zookeeper的API使用

curator简介与客户端之间的异同点 常用的zookeeper java客户端: zookeeper原生Java API zkclient Apache curator ZooKeeper原生Java API的不足之处: 在连接zk超时的时候,不支持自动重连,...

ZeroOne01
04/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
4
0
现场看路演了!

HiBlock
昨天
12
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
9
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
14
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部