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