ZooKeeper Java API


[転載は作者とテキストリンクを明記してください. 间违いがあれば、コメントで指摘してください. 
ZooKeeperはJavaとCのbindingを提供した.本文はJava関連APIに注目する.
準備作業
ZooKeeperインストールディレクトリのzookeeper.x.x.x.x.jarファイルをプロジェクトのclasspathパスの下にコピーします.
接続とコールバックインタフェースの作成
まずZooKeeperオブジェクトを作成する必要があり、その後のすべての操作はそのオブジェクトに基づいて行われる.
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) throws IOException

各パラメータの詳細は、次のとおりです.
connectString.zookeeper serverリストは、カンマで区切られています.ZooKeeperオブジェクトが初期化されると、serverリストから1つのserverが選択され、接続の確立が試みられます.接続の確立に失敗すると、リストの残りの項目から1つのserverが選択され、再び接続の確立が試みられます.sessionTimeout.接続のタイムアウト時間を指定します.watcher.イベントコールバックインタフェースなお、ZooKeeperオブジェクトを作成すると、オブジェクトの初期化が完了するとすぐに戻ります.接続の確立は非同期の形で行われ、接続が正常に確立するとwatcherのprocessメソッドがコールバックされます.serverとの接続を同期して確立するには、自分でさらにカプセル化する必要があります.
public class ZKConnection {
    /**
     * server  ,      
     */
    protected String hosts = "localhost:4180,localhost:4181,localhost:4182";
    /**
     *        ,   
     */
    private static final int SESSION_TIMEOUT = 5000;
    private CountDownLatch connectedSignal = new CountDownLatch(1);
    protected ZooKeeper zk;

    /**
     *   zookeeper server
     */
    public void connect() throws Exception {
        zk = new ZooKeeper(hosts, SESSION_TIMEOUT, new ConnWatcher());
        //       
        connectedSignal.await();
    }

    public class ConnWatcher implements Watcher {
        public void process(WatchedEvent event) {
            //     ,   process   ,  event.getState() KeeperState.SyncConnected
            if (event.getState() == KeeperState.SyncConnected) {
                //     , wait connect          
                connectedSignal.countDown();
            }
        }
    }
}

 
znodeの作成
ZooKeeperオブジェクトのcreateメソッドはznodeを作成するために使用される.
String create(String path, byte[] data, List acl, CreateMode createMode);

各パラメータの詳細は、次のとおりです.
path.znodeの経路.Data.znodeに関連付けられたデータ.acl.権限情報を指定し、権限を指定したくない場合はIds.OPEN_に転送できます.ACL_UNSAFE.
znodeタイプを指定します.CreateModeは列挙クラスで、その中からメンバーを選択して入力すればいいです.znodeタイプの詳細については、本人の前のブログを参照してください.
/**
 *       
 */
public void create(String nodePath, byte[] data) throws Exception {
    zk.create(nodePath, data, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
}

 
サブnodeリストの取得
ZooKeeperオブジェクトのgetChildrenメソッドは、サブnodeリストを取得するために使用される.
List getChildren(String path, boolean watch);

watchパラメータは、path nodeのサブnodeの増加および削除イベント、およびpath node自体の削除イベントを傍受するかどうかを指定するために使用される.
znodeが存在するか否かを判断する
ZooKeeperオブジェクトのexistsメソッドは、指定znodeが存在するか否かを判定するために用いる.
Stat exists(String path, boolean watch);

watchパラメータはpath nodeの作成、削除イベント、およびデータ更新イベントを傍受するかどうかを指定するために使用する.nodeが存在する場合、nodeの状態情報を返し、そうでない場合nullを返す.
nodeに関連付けられたデータの取得
ZooKeeperオブジェクトのgetDataメソッドはnode関連のデータを取得するために用いる.
byte[] getData(String path, boolean watch, Stat stat);

watchパラメータは、path nodeの削除イベントを傍受するかどうか、およびデータ更新イベントを指定するために使用する、path nodeの作成イベントは傍受しないことに注意する.path nodeが存在しない場合、このメソッドはKeeperException.NoNodeException異常を放出するからである.statパラメータは送信パラメータであり、getDataメソッドはpath nodeの状態情報をパラメータに設定する.
nodeに関連付けられたデータの更新
ZooKeeperオブジェクトのsetDataメソッドはnode関連のデータを更新するために用いる.
Stat setData(final String path, byte data[], int version);

Dataは更新対象のデータ.versionパラメータに更新対象のデータのバージョンを指定し、versionが実際のバージョンと異なる場合、更新操作は失敗する.versionを-1と指定するとバージョンチェックは無視する.path nodeの状態情報を返す.
znodeの削除
ZooKeeperオブジェクトのdeleteメソッドはznodeを削除するために使用する.
void delete(final String path, int version);

バージョンパラメータの役割はsetDataメソッドと同じである.
残りのインタフェース
ZooKeeperオブジェクトのAPIドキュメントを参照してください.
注意すべき点
znodeに関連付けられたデータが1 Mを超えてはならない.zookeeperの使命は、データストレージではなく分散コラボレーションである..
getChildren,getData,existsメソッドは、対応するイベントをリスニングするかどうかを指定します.create,delete,setDataメソッドは、対応するイベントの発生をトリガーします.以上説明したいくつかの方法の多くはその非同期のリロード方法が存在し、具体的にはAPIの説明を参照してください.