Zookeeperによる分散システム管理(2)
前回はZookeeperがどのようなものかを簡単にまとめてみました。
今回はその続きということで、実際にJavaのプログラムから触ってみることにします。
Javaクライアントにて接続してみる
Zookeeperの依存性を追加する
Zookeeperの依存性を追加します。
Mavenを利用している場合、pomファイルに以下の記述を追加します。
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency>
サンプルソース
一般的に利用されるであろう非同期処理パターン
public class Sample01 { public static void main(String[] args) throws Exception { ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 3000, null); // 非同期でexists呼び出しを行う zk.exists("/foo", myWatcher, existsCallBack, null); // 確認のためコールバックされる前にスレッドが終了しないようにスリープしておく Thread.sleep(3000); } // Watcherの実装 static Watcher myWatcher = new Watcher() { @Override public void process(WatchedEvent event) { // WatcherEventを処理 System.out.println("myWatcher:" + event.toString()); } }; // コールバックメソッドの実装 static StatCallback existsCallBack = new StatCallback() { @Override public void processResult(int rc, String path, Object ctx, Stat stat) { System.out.println("existsCallBack:" + path); } }; }
複数の操作を1つのブロックにまとめてアトミックに実行できるMultitop
public class Sample02 extends Transaction implements Watcher { protected Sample02(ZooKeeper zk) { super(zk); } public static void main(String[] args) throws Exception { ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 3000, null); Sample02 sample = new Sample02(zk); // Multiopの利用 sample.delete("/foo", -1); sample.delete("/bar", -1); sample.commit(); } @Override public void process(WatchedEvent event) { System.out.println(event.toString()); } }
Zookeeper本の追加資料のurl
github.com