curator源码(一) 初始化、启动和关闭。

Curator框架是zookeeper客户端框架,官网有句话说的很简洁:curator对于zookeeper就像Guava对于java。
重复策略,实例化,众多实用的食谱菜单(分布式锁,计数器,队列,栅栏,信号量,路径缓存)。

初始化

1.直接调用CuratorFrameworkFactory的newClient方法

   /**
     * 创建客户端
     * @param connectString       zk地址
     * @param sessionTimeoutMs    session超时
     * @param connectionTimeoutMs 路径超时
     * @param retryPolicy         重复策略
     * @return client
     */
    public static CuratorFramework newClient(String connectString, int sessionTimeoutMs, 
    int connectionTimeoutMs, RetryPolicy retryPolicy)
    {
        return builder().
            connectString(connectString).
            sessionTimeoutMs(sessionTimeoutMs).
            connectionTimeoutMs(connectionTimeoutMs).
            retryPolicy(retryPolicy).
            build();
    }
    /**
     * 返回一个用来创建CuratorFramework新的builder
     * @return new builder
     */
    public static Builder builder()
    {
        return new Builder();
    }

返回的Builder是CuratorFrameworkFactory的内部类,主要用于流式的创建CuratorFramework,里面包含所需参数

        private EnsembleProvider ensembleProvider;
        private int sessionTimeoutMs = DEFAULT_SESSION_TIMEOUT_MS;
        private int connectionTimeoutMs = DEFAULT_CONNECTION_TIMEOUT_MS;
        private int maxCloseWaitMs = DEFAULT_CLOSE_WAIT_MS;
        private RetryPolicy retryPolicy;
        private ThreadFactory threadFactory = null;
        private String namespace;
        private List<AuthInfo> authInfos = null;
        private byte[] defaultData = LOCAL_ADDRESS;
        private CompressionProvider compressionProvider = DEFAULT_COMPRESSION_PROVIDER;
        private ZookeeperFactory zookeeperFactory = DEFAULT_ZOOKEEPER_FACTORY;
        private ACLProvider aclProvider = DEFAULT_ACL_PROVIDER;
        private boolean canBeReadOnly = false;
        private boolean useContainerParentsIfAvailable = true;

ensembleProvider(配置提供者) 可以通过在Builder里的以下2个方法构造。设置服务器的链接地址,
格式: host:port,host2:port2…..
主要由此提供链接地址,供后期zookeeper里使用。

       public Builder connectString(String connectString)
        {
            ensembleProvider = new FixedEnsembleProvider(connectString);
            return this;
        }

       public Builder ensembleProvider(EnsembleProvider ensembleProvider)
        {
            this.ensembleProvider = ensembleProvider;
            return this;
        }

2.通过Builder的build函数创建客户端。

       /**
         * 根据builder里的值创建新的CuratorFramework
         * @return new CuratorFramework
         */
        public CuratorFramework build()
        {
            return new CuratorFrameworkImpl(this);
        }

3.CuratorFrameworkImpl定义

CuratorFrameworkImpl为CuratorFramework接口的一个实现,平时主要用到的就是此client。
该构造函数主要还是使用Builder里的默认配置的一些参数,这些参数可以通过CuratorFrameworkFactory李的Builder去流式创建。

设置如下参数,如ZookeeperFactory 工厂,CuratorZookeeperClient【重点,客户端的工作主要靠它】,listeners 监听,backgroundOperations 后台运行行为,namespace 命名空间(用于放置在路径的前缀),
threadFactory CuratorFrameworkImpl的线程工厂,connectionStateManager 链接状态管理器, compressionProvider 压缩器等等。

public CuratorFrameworkImpl(CuratorFrameworkFactory.Builder builder)
    {
        ZookeeperFactory localZookeeperFactory = makeZookeeperFactory(builder.getZookeeperFactory());
        this.client = new CuratorZookeeperClient(localZookeeperFactory, builder.getEnsembleProvider(), builder.getSessionTimeoutMs(), builder.getConnectionTimeoutMs(), new Watcher()
        {
            @Override
            public void process(WatchedEvent watchedEvent)
            {
                CuratorEvent event = new CuratorEventImpl(CuratorFrameworkImpl.this, CuratorEventType.WATCHED, watchedEvent.getState().getIntValue(), unfixForNamespace(watchedEvent.getPath()),
                 null, null, null, null, null, watchedEvent, null);
                processEvent(
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值