dubbo系列之zookeeper创建节点
前期准备
先在Idea上安装zookeeper的可视化插件,方便查看节点变化。
启动zk服务端
源码构成
RegistryFactory类
1 | registry.register(registedProviderUrl);//创建节点 |
debug进去看看吧
1 | public void register(URL url) { |
AbstractZookeeperClient()
1 | public void create(String path, boolean ephemeral) { |
AbstractZookeeperClient.create//dubbo/com.alibaba.dubbo.demo.DemoService/providers/ dubbo%3A%2F%2F192.168.100.52%3A20880%2Fcom.alibaba.dubbo.demo.DemoService%3Fanyhost%3Dtrue%26 application%3Ddemo-provider%26dubbo%3D2.0.0%26generic%3Dfalse%26interface%3D com.alibaba.dubbo.demo.DemoService%26loadbalance%3Droundrobin%26methods%3DsayHello%26owner%3 Dwilliam%26pid%3D2416%26side%3Dprovider%26timestamp%3D1474276306353
–>createEphemeral(path);//临时节点 dubbo%3A%2F%2F192.168.100.52%3A20880%2F………….
–>createPersistent(path);//持久化节点 dubbo/com.alibaba.dubbo.demo.DemoService/providers
zk持久化节点 和临时节点有什么区别?
持久化节点:一旦被创建,触发主动删除掉,否则就一直存储在ZK里面。
临时节点:与客户端会话绑定,一旦客户端会话失效,这个客户端端所创建的所有临时节点都会被删除。
服务提供者能实现失效踢出是什么原理(高频题)
zookeeper的有哪些节点,他们有什么区别?讲一下应用场景
答:在分布式系统中,我们常常需要知道某个机器是否可用,传统的开发中,可以通过Ping某个主机来实现,Ping得通说明对方是可用的,相反是不可用的,ZK 中我们让所有的机其都注册一个临时节点,我们判断一个机器是否可用,我们只需要判断这个节点在ZK中是否存在就可以了,不需要直接去连接需要检查的机器,降低系统的复杂度。