Curator Framework判断Zookeeper节点是临时节点还是持久化节点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010889616/article/details/80211908

Curator Framework客户端使用,请看上一篇博客《Zookeeper客户端Curator Framework使用》。

CuratorFramework类有一个判断节点是否存在的接口checkExists(),该接口返回一个org.apache.zookeeper.data.Stat对象,对象中有一个ephemeralOwner属性。

  • 如果该节点是持久化节点,ephemeralOwner的值为0
  • 如果该节点是临时节点,ephemeralOwner的值大于0

示例,现在Zookeeper上有一个持久化节点(/chijiu )和一个临时节点(/linshi)。

1、获取持久化节点(/chijiu )节点Stat对象


2、获取临时节点(/linshi )节点Stat对象


完整代码如下:

引入jar包


测试代码

import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.data.Stat;

/**
 * Created by wzj on 2018/5/3.
 */
public class ZKTest
{

    public static void main(String[] args) throws Exception
    {
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);

        CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.3.45:2181", retryPolicy);

        client.start();


        crateNode(client,"/linshi",CreateMode.EPHEMERAL,"");
        crateNode(client,"/chijiu",CreateMode.PERSISTENT,"");

        System.out.println(getNodeType(client,"/linshi"));

        System.out.println(getNodeType(client,"/chijiu"));
    }

    /**
     * 创建节点
     * @param client 客户端
     * @param path       路径
     * @param createMode 节点类型
     * @param data       节点数据
     * @return 是否创建成功
     */
    public static boolean crateNode(CuratorFramework client,String path, CreateMode createMode, String data)
    {
        try
        {
            client.create().withMode(createMode).forPath(path, data.getBytes());
        }
        catch (Exception e)
        {
            e.printStackTrace();
            return false;
        }

        return true;
    }

    /**
     * 判断节点是否是持久化节点
     * @param client 客户端
     * @param path 路径
     * @return null-节点不存在  | CreateMode.PERSISTENT-是持久化 | CreateMode.EPHEMERAL-临时节点
     */
    public static CreateMode getNodeType(CuratorFramework client,String path)
    {
        try
        {
            Stat stat = client.checkExists().forPath(path);

            if (stat == null)
            {
                return null;
            }

            if (stat.getEphemeralOwner() > 0)
            {
                return CreateMode.EPHEMERAL;
            }

            return CreateMode.PERSISTENT;
        }
        catch (Exception e)
        {
            e.printStackTrace();

            return null;
        }
    }

}
阅读更多
想对作者说点什么?
相关热词

博主推荐

换一批

没有更多推荐了,返回首页