私が欲しいもの:
- ZooKeeper でトランザクションを使用できるようにしたい
- 私は彼らが実際に完了することを望みます
ここで、最初に Apache (旧 Netflix) Curator ライブラリを使用してみましたが、例に従ってトランザクションを実行すると、次のようになります。
curator.inTransaction().create().forPath(path, data)
.and().commit();
そして、そこに行き詰まるだけです(トランザクションにはアイテムが1つしかないため、txnは不要ですが、物事をシンプルに保とうとしています)。そこで、未加工の ZooKeeper API を使用して、より完全なテスト シナリオを作成することにしました。
final CountDownLatch connect = new CountDownLatch(1);
ZooKeeper z = new ZooKeeper("localhost:2181", 60000, new Watcher() {
@Override
public void process(WatchedEvent arg0) {
System.err.println("EVENT! " + arg0);
connect.countDown();
}
});
List<ACL> acl = ImmutableList.of(new ACL(0777, new Id("world", "anyone")));
connect.await();
System.err.println("CREATING");
z.multi(ImmutableList.of(
Op.create("/foo", "DATA".getBytes(), acl, CreateMode.PERSISTENT)));
また、印刷後に死人のようにぶら下がっています
EVENT! WatchedEvent state:SyncConnected type:None path:null
CREATING
Zookeeper サーバーに関しては、1 つのノードとして実行されているため、他のノードと競合する必要はありません。/foo はツリーに表示されません-zooinspectorを使用して確認します。トランザクションなしで ZK を使用すると、すべて正常に動作します。私は webz を探し回りましたが、関連するものは何も見つかりませんでした。明らかな何かが欠けていますか?