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節點還沒有找到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章