Curator简介

1.简介

      Curator 框架是一个高级 API,它极大地简化了 ZooKeeper 的使用。它添加了许多基于 ZooKeeper 构建的功能,并处理管理与 ZooKeeper 集群的连接和重试操作的复杂性。其中一些功能是:

  1.    自动连接管理:
  • 存在需要 ZooKeeper 客户端重新创建连接和/或重试操作的潜在错误情况。Curator 自动且透明地(大部分)处理这些情况。
  • 监视 NodeDataChanged 事件并根据需要调用 updateServerList()。
  1.    更清洁的 API:
  • 简化原始 ZooKeeper 方法、事件等。
  • 提供现代、流畅的界面
  1.    其他实现:
  • 领导选举
  • 共享锁
  • 路径缓存和观察者
  • 分布式队列
  • 分布式优先队列

2.分配 Curator 框架实例

       CuratorFrameworks 是使用 CuratorFrameworkFactory 分配的,它提供了工厂方法和用于创建实例的构建器。重要提示:CuratorFramework 实例是完全线程安全的。您应该在应用程序中为每个 ZooKeeper 集群共享一个 CuratorFramework。

        工厂方法 (newClient()) 提供了一种创建实例的简化方法。Builder 可以控制所有参数。拥有 CuratorFramework 实例后,您必须调用 start() 方法。在您的应用程序结束时,您应该调用 close()。

2.1命名空间

       因为 ZooKeeper 集群是一个共享环境,所以遵守命名空间约定至关重要,这样使用给定集群的各种应用程序就不会使用冲突的 ZK 路径。

       CuratorFramework 有一个“命名空间”的概念。您在创建 CuratorFramework 实例时设置命名空间(通过 Builder)。然后,CuratorFramework 会在调用其 API 之一时将命名空间添加到所有路径。

CuratorFramework    client = CuratorFrameworkFactory.builder().namespace("MyApp") ... build();
client.create().forPath("/test", data);

3.使用

3.1添加依赖

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.10.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>

3.2创建对应的Bean对象:

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;

@Configuration
public class CuratorConfig {

    /**
     * destroyMethod  当对象销毁时会自动调用close方法
     * curator framework服务
     * @param zkServerAddress
     * @return
     */
    @Bean(destroyMethod ="close")
    public CuratorFramework curatorFramework(@Value("${zk.server.address}") String zkServerAddress) {
        ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(2000, 3);
        CuratorFramework curatorFramework = CuratorFrameworkFactory.builder().connectString(zkServerAddress).retryPolicy(retryPolicy).namespace("namespace").build();
        curatorFramework.start();
        return curatorFramework;
    }
}

4.领导选举的实现

可参考链接:LeaderLatch的使用与分析_Jay的博客-CSDN博客_leaderlatch

public void init() {
        leaderLatch = new LeaderLatch(curatorFramework, zkNodeProperties.getServers(), SystemUtil.getLocalIP());
        leaderLatch.addListener(new LeaderLatchListener() {
            @Override
            public void isLeader() {
                //当成为主节点时所作的操作
            }

            @Override
            public void notLeader() {
                //当成为从节点时所作的操作
            }
        });
        leaderLatch.start();

    }

5.监听节点

参考文献

CuratorFramework节点监听二 TreeCache_hit_ynsun的博客-CSDN博客

workerNodePath = TreeCache.newBuilder(curatorFramework, zkNodeProperties.getTasks()).setCacheData(false).build();
workerNodePath.getListenable().addListener((client, event) -> {
   //节点状态变化时所作的处理
});
workerNodePath.start();

参考链接:

Apache Curator Framework –

Zookeeper框架Curator使用 - 扎心了,老铁 - 博客园

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值