前言
上一篇介绍了用Dubbo + zookeeper
实现RPC
调用,你就没有什么问题吗?markdown
- 为何要用zk?
- 为何消费者要配置zk地址,有什么做用?
- 为何生产者要配置zk地址,有什么做用?
zk在这主要是数据的发布与订阅做用!!!ide
Idea安装zookeeper
- Idea plugin搜索
zookeeper插件
,并重启
- 重启以后配置地址
3. 在侧边栏查看工具
zk分析
zk 节点
- zk的内部都是由节点组成,相似于二叉树的节点概念,每个节点均可以存在
子节点
和当前节点信息
。
2. 节点包括
持久节点
和
临时节点
持久节点
- 持久节点顾名思义,当客户端与服务端断开链接后,持久节点不会消失。Dubbo中的服务名节点就是持久节点。
临时节点
- 临时节点,当客户端与服务端断开链接后,因为zk的心跳机制,临时节点会被删除。Dubbo中的
URL配置节点
就是持久节点。
dubbo注册和监听
生产者往zk发布信息
- 生产者在配置文件中配置zk地址,在启动项目时,Dubbo会往zk中写入节点信息,即将数据推送到zk中。
- 节点的目录为:dubbo - 服务名 - providers - URL等地址信息
另外第四个节点是临时节点,包含IP地址,服务名称,服务的各类方法,dubbo版本号,时间戳等等
3. zk会经过心跳检测链接,若是链接断了,会将第四个节点给删除。
消费者订阅zk节点
- 因为消费者有
@Refrence
注解,dubbo会在zk中监听这个服务的子节点,获取信息。
- 当生产者挂掉时,因为心跳机制,zk会将临时节点删除,当消费者监听到节点的信息变化时,消费者会拉取监听节点的信息。
消费者调用生产者服务
- 消费者获取信息后经过Dubbo的各类协议进行远程调用。
- 当生产者的某个服务断开链接后,zk会向监听者(消费者)主动发送变化的信息,便于消费者的调用。
- 固然若是provider所有断开后,也能够经过直连的方式调用。
问题
- 因为消费者是监听生产者的节点,那么dubbo在zk中建立的消费者节点是什么用途
猜想:用于给dubbo-admin
等提供消费者信息等。
结尾
因为车辙还未看过Dubbo注册订阅的源码,所以上述不保证百分百正确~~~工具