zoukankan      html  css  js  c++  java
  • Zookeeper客户端Apache Curator

    本文不对Zookeeper进行介绍,主要介绍Curator怎么操作Zookeeper。

    Apache Curator是Apache ZooKeeper的Java / JVM客户端库,Apache ZooKeeper是一种分布式协调服务。它包括一个高级API框架和实用程序,使Apache ZooKeeper更容易和更可靠。它还包括常见用例和扩展(如服务发现和Java 8异步DSL)的配方。

    官网:http://curator.apache.org/index.html

    Curator项目组件(下载官方源码就可以看到以下组件)

    Recipes Zookeeper典型应用场景的实现,这些实现是基于Curator Framework。
    Framework Zookeeper API的高层封装,大大简化Zookeeper客户端编程,添加了例如Zookeeper连接管理、重试机制等。
    Utilities 为Zookeeper提供的各种实用程序。
    Client Zookeeper client的封装,用于取代原生的Zookeeper客户端(ZooKeeper类),提供一些非常有用的客户端特性。
    Errors Curator如何处理错误,连接问题,可恢复的例外等。

    Maven依赖(地址:https://search.maven.org/search?q=org.apache.curator

    GroupID/Org ArtifactID/Name 描述
    org.apache.curator curator-recipes 所有典型应用场景。需要依赖client和framework,需设置自动获取依赖。
    org.apache.curator curator-framework 同组件中framework介绍。
    org.apache.curator curator-client 同组件中client介绍。
    org.apache.curator curator-test 包含TestingServer、TestingCluster和一些测试工具。
    org.apache.curator curator-examples 各种使用Curator特性的案例。
    org.apache.curator curator-x-discovery 在framework上构建的服务发现实现。
    org.apache.curator curator-x-discoveryserver 可以和Curator Discovery一起使用的RESTful服务器。
    org.apache.curator curator-x-rpc Curator framework和recipes非java环境的桥接。

    分布式锁实现

    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-recipes</artifactId>
      <version>4.1.0</version>
    </dependency>
    public static void main(String[] args) {
            String zookeeperConnectionString = "localhost:2181";
            RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
            CuratorFramework client = CuratorFrameworkFactory.newClient(zookeeperConnectionString, retryPolicy);
            client.start();
    
            try {
                //创建分布式锁, 锁空间的根节点路径为/curator/lock
                InterProcessMutex lock = new InterProcessMutex(client, "/curator/lock");
                if ( lock.acquire(1000, TimeUnit.SECONDS) )
                {
                    try
                    {
                        // do some work inside of the critical section here
                        System.out.println("do some work inside of the critical section here");
                    }
                    finally
                    {
                        //完成业务流程, 释放锁
                        lock.release();
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
  • 相关阅读:
    成立移动互联网公司???
    C++的子对象
    单链表 操作的18种算法
    再论虚函数
    多线程(三)
    多线程(二)
    多线程(一)
    存储过程的参数
    git
    多态(三)
  • 原文地址:https://www.cnblogs.com/coder306/p/13087625.html
Copyright © 2011-2022 走看看