Dubbo 在 zk上创建的节点

Dubbo在ZooKeeper上创建的节点包括configurators、providers、routers和consumers。虽然provider已创建providers节点,但consumer在订阅时仍尝试创建所有这三个类别,即使providers已存在,不会进行覆盖。Zookeeper中,持久化节点仅在主动删除时消失,重复创建会导致NodeExistsException异常。在Dubbo实现中,consumer订阅时对于providers节点的操作并未执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


拾遗

一共有四个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节点还没有找到

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值