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