四:ZK客戶端Curator

apache原生的zookeeper不太友好,如今市面上有兩種,一種是zkclient,在一中就是apache的curator,node

相比於zkclient來講,curator文檔更友好,提供了Fluent風格的API,更加易懂易操做apache

首先是建立zk鏈接session

CuratorFramework client = builder.connectString("192.168.11.56:2180")  //ip:portui

       .sessionTimeoutMs(30000)  //session timeouotspa

       .connectionTimeoutMs(30000)   //connect timeout事務

      .canBeReadOnly(false)  ip

       .retryPolicy(new ExponentialBackoffRetry(1000, 3))  //重試策略文檔

       .namespace(namespace)  //命名空間get

       .build();  it

if(!client.isStart())

    client.start();  

建立節點:

    if(client.checkExists().forPath(path) == null)

        client.create().forPath(path, value.toBytes);

建立節點的時候還有臨時節點,臨時有序節點,永久有序節點,採用withMode(CreateMode.),CreateMode提供了集中實現

若是不判斷的話,在節點存在的時候會拋出NodeExistsException

判斷節點是否存在

    Stat stat = client.checkExists().forPath(path);

    stat類裏面包含了不少信息,包括version,zxid,等信息,zk裏面每次更新都會更新一次版本,採用樂觀鎖的策略,zxid是事務的id(zk裏面,事務id採用64位,前32位表示了leader的統治期,後32位表示了事務的序號)

更新數據

  if(client.checkExists().forPath(path) != null)

        client.setData().forPath(path, value.toBytes);

若是不判斷的話,在節點存在的時候會拋出NodeExistsException

刪除數據:

if(client.checkExists().forPath(path) != null)

        client.delete().forPath(path);

若是不判斷的話,在節點存在的時候會拋出NoNodeException

獲取子節點:

if(client.checkExists().forPath(path) != null)

       List<String> childList = client.getChildren().forPath(path);

若是不判斷的話,在節點存在的時候會拋出NoNodeException

監聽:

監聽分爲監聽Node和Path,node有nodeUpdate和nodeDelete時間,PathChildrenCache有添加子節點,刪除子節點等監聽,此處再也不細說

其他Election,Lock,Automic等有興趣的話能夠去百度,不少

相關文章
相關標籤/搜索