Bootstrap

Dubbo 在 zk上创建的节点

文章目录


拾遗

一共有四个configurators、providers、routers、consumers
在provider中已经创建了providers

@Override
    public void create(String path, boolean ephemeral) {
        if (!ephemeral) {
            if (checkExists(path)) {
                return;
            }
        }
        int i = path.lastIndexOf('/');
        //把前面的线创建好   dubbo/com.xx.xx/providers
        if (i > 0) {
            create(path.substring(0, i), false);
        }
        if (ephemeral) {
            //创建一个临时节点
            createEphemeral(path);
        } else {
            createPersistent(path);
        }
    }

先递归创建前面的,然后最后创建一个 toUrlPath(url)

但是provider已经创建了,在consuer的zookeeperRegistry中doSubscribe中遍历三个category(configurators、providers、routers)的时候,又创建了三个节点,其中包括了provider创建的providers,不会覆盖吗?

zkClient.create(path, false);

zookeeperClient中只有一个curator的扩展点,所以用的是curator的api,在curator中

持久化节点创建后,就一直存在,除非有删除操作主动来删除这个节点,持久化节点不会因为创建该节点的客户端会话失效而消失。如果重复创建,客户端会抛出NodeExistsException异常。
链接

重复创建会抛出:NodeExistsException
zkClient.create(path, false);中传入的是false,即创建持久化节点,而不是临时节点
createPersistent(path);中:

    @Override
    public void createPersistent(String path) {
        try {
            client.create().forPath(path);
        } catch (NodeExistsException e) {
        //    如果已经有了,这里不处理
        } catch (Exception e) {
            throw new IllegalStateException(e.getMessage(), e);
        }
    }

如果已经存在了就不做处理。

总结

provider创建了providers
consumer在订阅的时候创建了configurators、routers,也会尝试创建providers,但是什么也没做。
consumer节点还没有找到

;