拾遺
一共有四個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節點還沒有找到